A.4.1 Добавление Java-классов
Java находит классы, выполняя поиск в classpath, который представляет собой список Java-архивных файлов и/или каталогов, содержащих файлы классов. В Octave classpath состоит из двух частей:
- статический classpath инициализируется один раз при запуске JVM;
- динамический classpath, который можно изменять во время выполнения.
Octave сначала ищет в статическом classpath, а затем в динамическом classpath. Поэтому классы, присутствующие как в статическом classpath, так и в динамическом classpath, будут найдены и загружены из статического classpath. Классы, которые будут часто использоваться или должны быть доступны всем пользователям, следует добавлять в статический classpath. Статический classpath заполняется один раз из содержимого текстового файла с именем javaclasspath.txt (или исторически classpath.txt) при запуске Java-виртуальной машины. Этот файл содержит по одной строке для каждого добавляемого в статический classpath элемента. Эти строки могут указывать на каталоги, содержащие файлы классов, или Java-архивы с полными иерархиями файлов классов. Строки комментариев, начинающиеся с символов '#' или '%', игнорируются.
Правила поиска для файла javaclasspath.txt (или classpath.txt):
- Сначала Octave пытается найти его в текущем каталоге (откуда был запущен Octave). Если такой файл найден, он считывается и определяет начальный статический classpath. Таким образом, можно определить статический classpath на основе каждого запуска Octave.
- Далее Octave ищет его в домашнем каталоге пользователя. Если файл javaclasspath.txt существует здесь, его содержимое добавляется к статическому classpath (если таковой имеется). Таким образом, можно создать начальный статический classpath на основе каждого пользователя.
- Наконец, Octave ищет javaclasspath.txt в каталоге m-файлов, где находятся функции Octave Java. Это каталог, где находится функция javaclasspath.m, обычно похожий на
OCTAVE_HOME/share/octave/OCTAVE_VERSION/m/java/. Вы можете найти этот каталог, выполнив командуwhich javaclasspath
.Если этот файл существует здесь, его содержимое также добавляется к статическому classpath. Обратите внимание, что архивы и каталоги классов, определенные на этом последнем шаге, будут влиять на всех пользователей.
Классы, используемые только определенным скриптом, следует помещать в динамический classpath. Эту часть classpath можно изменять во время выполнения, используя функции javaaddpath и javarmpath.
Пример:
octave> base_path = "C:/Octave/java_files";
octave> # add two JAR archives to the dynamic classpath
octave> javaaddpath ([base_path, "/someclasses.jar"]);
octave> javaaddpath ([base_path, "/moreclasses.jar"]);
octave> # check the dynamic classpath
octave> p = javaclasspath;
octave> disp (p{1});
C:/Octave/java_files/someclasses.jar
octave> disp (p{2});
C:/Octave/java_files/moreclasses.jar
octave> # remove the first element from the classpath
octave> javarmpath ([base_path, "/someclasses.jar"]);
octave> p = javaclasspath;
octave> disp (p{1});
C:/Octave/java_files/moreclasses.jar
octave> # provoke an error
octave> disp (p{2});
error: A(I): Index exceeds matrix dimension.
Другой способ добавления файлов в динамический classpath только для вашей учетной записи пользователя — использование файла .octaverc, который хранится в вашем домашнем каталоге. Все команды Octave в этом файле выполняются каждый раз при запуске новой инстанции Octave. Следующий пример добавляет каталог octave в путь поиска Octave и архив myclasses.jar в этом каталоге в путь поиска Java.
# contents of .octaverc:
addpath ("~/octave");
javaaddpath ("~/octave/myclasses.jar");
© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v5.2.0/Making-Java-Classes-Available.html