Как добавить несколько файлов jar в classpath в linux

хорошо, я очень новичок в linux и командной строке и довольно новичок в java. Я получил стажировку, создавая программу java. Я, наконец, сделал это на своей машине (windows), и теперь мне нужно перенести его на машину linux для тестирования, а затем запустить его как исполняемый файл. Я много читал и исследовал linux и понимал пути к классам, но все еще очень трудно полностью понять. Просто для меня это пока не срабатывает. Может ли кто-нибудь объяснить цель classpath упрощенным способом используя примеры? Один из самых запутанных аспектов для меня-это определение физического пути к банке. Я начинаю полностью с usr или мне нужно только начать с папки jvm? Если это имеет значение, моя программа java не находится в папке jvm. Кто-нибудь может пролить свет на это?

EDIT: большое спасибо, ребята, за вашу помощь, я не могу сказать, что я полностью в ясном, но мое понимание моей ситуации намного лучше.

4 ответов


использовать :

bash$ export CLASSPATH="path/to/jar/file:path/tojar/file2"
bash$ javac MyMainClass.java

для любого обычно сложного проекта java вы должны искать скрипт ant с именем build.xml


скажем, у вас есть несколько файлов jar a.jar,b.jar и c.jar - ... Чтобы добавить их в classpath во время компиляции, вам нужно сделать

$javac -cp .:a.jar:b.jar:c.jar HelloWorld.java

запустить do

$java -cp .:a.jar:b.jar:c.jar HelloWorld

путь к классам-это место (ы), где компилятор java (команда: javac) и JVM (команда:java) ищут, чтобы найти классы, на которые ссылается ваше приложение. Что означает для приложения ссылка на другой класс ? Простыми словами это означает использовать этот класс где-то в его коде:

пример:

public class MyClass{
    private AnotherClass referenceToAnotherClass;
    .....
}

когда вы пытаетесь скомпилировать это (javac), компилятору понадобится класс AnotherClass. То же самое при попытке запустить приложение: JVM понадобится класс AnotherClass. Чтобы найти этот класс, javac и JVM выглядят в определенном (наборе) мест. Эти места указаны путем к классам, который в linux является списком каталогов, разделенных двоеточием (каталоги, в которых javac/JVM должен искать, чтобы найти AnotherClass, когда им это нужно).

Итак, чтобы скомпилировать ваш класс, а затем запустить его, вы должны убедиться, что путь к классу содержит каталог, содержащий класс AnotherClass. Затем вы вызываете его так:

javac -classpath "dir1;dir2;path/to/AnotherClass;...;dirN" MyClass.java //to compile it
java -classpath "dir1;dir2;path/to/AnotherClass;...;dirN" MyClass //to run it

обычно классы приходят в виде "пакетов", называемых jar-файлами/библиотеками. В этом случае вы должны убедиться, что кувшин класса AnotherClass на ваш classpaht:

javac -classpath "dir1;dir2;path/to/jar/containing/AnotherClass;...;dirN" MyClass.java //to compile it
java -classpath ".;dir1;dir2;path/to/jar/containing/AnotherClass;...;dirN" MyClass //to run it

в приведенных выше примерах вы можете увидеть, как скомпилировать класс (MyClass.java), расположенный в рабочем каталоге, а затем запустите скомпилированный класс (обратите внимание на "."в начале пути к классам, который означает текущий каталог). Этот каталог должен быть добавлен в classpath тоже. В противном случае JVM не сможет его найти.

если у вас есть класс в файле jar, как вы указали в вопросе, то вы должны убедиться , что jar также находится в пути к классам вместе с остальными необходимыми каталогами.

пример:

java -classpath ".;dir1;dir2;path/to/jar/containing/AnotherClass;path/to/MyClass/jar...;dirN" MyClass //to run it

или более общий (предполагая некоторую иерархию пакетов):

java -classpath ".;dir1;dir2;path/to/jar/containing/AnotherClass;path/to/MyClass/jar...;dirN" package.subpackage.MyClass //to run it

чтобы избежать установки пути к классам каждый раз, когда вы хотите запустить приложение можно определить переменную среды с именем CLASSPATH.

в linux, в командной строке:

export CLASSPATH="dir1;dir2;path/to/jar/containing/AnotherClass;...;dirN" 

или отредактировать ~/.bashrc и добавьте эту строку где-нибудь в конце;

однако путь к классу подвержен частым изменениям, поэтому вы можете установить путь к классу в базовый набор dir, который вам нужен часто, а затем расширяет путь к классу каждый раз, когда вам нужно только для этого сеанса. Вот так:

export CLASSPATH=$CLASSPATH:"new directories according to your current needs" 

Шаг 1.

vi ~/.bashrc

Шаг 2. Добавьте эту строку к последней:

export CLASSPATH=$CLASSPATH:/home/abc/lib/*;  (Assuming the jars are stored in /home/abc/lib) 

Шаг 3.

source ~/.bashrc

после этих шагов direct complile и запустите свои программы (например, javac xyz.java)