Что такое путь к классу в Java?
Я написал программу, которая отлично работает на моем ноутбуке, но я действительно хочу, чтобы она работала на сервере, который у меня есть. Используя NetBeans, я очистил и собрал проект. Я скопировал содержимое папки dist на моем сервере, но не могу заставить работать, используя команду
java -jar nameOfFile.jar
Я получаю ошибку
java.lang.NoClassDefFoundError: org/....
Я немного читал, и я понял, что мне нужно в значительной степени указать, где находятся библиотеки, которые я использовал. Ну, они находятся в подпапке с именем lib.
Вопрос:
Итак, что мне нужно сделать, чтобы я мог запустить свою банку?
5 ответов
CLASSPATH - это переменная среды, которая помогает нам обучить виртуальную машину Java, с которой она начнет поиск файлов.class.
Мы должны хранить корень иерархий пакетов в переменных среды CLASSPATH.
В случае добавления или использования библиотек jar в нашем проекте, мы должны указать местоположение файла jar в переменной среды CLASSPATH.
Пример: если мы используем jar-файл jdbc mysql в нашем java-проекте, мы должны обновить местоположение jar-файла mysql в переменной среды CLASSPATH. если наш mysql.jar находится в c:\driver\mysql.jar, то
Мы можем установить classpath через DOS в Windows
set CLASSPATH=%CLASSPATH%;c:\driver\mysql.jar
В Linux мы можем сделать
export CLASSPATH=$CLASSPATH:[path of the jar]
Надеюсь, поможет!
Попробуй это:
java -classpath "$CLASSPATH:nameOfFile.jar:lib/*" path.to.your.MainClass
Что это делает, это устанавливает classpath к значению $CLASSPATH
, плюс nameOfFile.jar, плюс все .jar
файлы в lib/
,
Q. What is classpath??
Ответ: Classpath - это параметр в виртуальной машине Java или компилятор Java, который specifies the location of user-defined classes and packages.
Параметр может быть установлен либо в командной строке, либо через переменную окружения.
Пути к классам содержат:
JAR-файлы и
Пути к вершине иерархии пакетов.
Q.Why we need to set classpath?
Ответ: в основном classpath tells the location of classes
где все классы расположены.
Например, иногда нам нужно установить связь с базой данных, тогда нам нужно jdbc mysql connector jar
,
Q. What is JAR?
JAR (Java Archive) - это формат файла пакета, обычно используемый для объединения многих Java class files
и связанные метаданные и ресурсы (текст, изображения и т. д.) в один файл для распространения прикладного программного обеспечения или библиотек на платформе Java.
Просто JAR: Collection of Classes.
Таким образом, чтобы установить связь с базой данных, мы должны установить местоположение Mysql Jar в переменных Classpath в java.
Вот почему нам нужен classpath в Java.
Компилятор (например,
javac
) создается из
.java
-
.class
файлы и
JVM
использует эти
.class
файлы.
classpath
указывает на корень источника.
classpath
+
import_path
знак равно
full path
Например для MacOS
//full path
/Users/Application.jar/my/package/MainClass
//classpath
/Users/Application.jar
//import_path
my.package.MainClass
Полный путь к Android
ANDROID_HOME/platforms/android-<version>/android.jar
//e.g
/Users/alex/Library/Android/sdk/platforms/android-23/android.jar
При использовании файла META-INF/MANIFEST.MF для указания зависимостей Main-Class также должны быть указаны в манифесте.
Ключ -jar игнорирует всю другую информацию о пути к классам - для получения дополнительной информации см. Документацию по инструментам.
Вам нужно установить путь к классу, используя
Ниже работает в Bash . Это временно
set CLASSPATH=$CLASSPATH=[put the path here for lib]
Если вы хотите, чтобы он был постоянным, вы можете добавить вышеуказанные строки в файл ~/.bashrc
export CLASSPATH=$CLASSPATH:[put the path here for lib]:.
У вас есть 2 вопроса: один - это "вопрос заголовка", а другой - "вопрос с примечаниями" после проработки вашей проблемы.
Прочтите эту документацию ниже, чтобы лучше понять CLASSPATH.
https://docs.oracle.com/javase/tutorial/essential/environment/index.htmlhttps://docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html
Это быстро и просто для того, что вам нужно.
Для вашего первого вопроса это будет:
В документации рекомендуется устанавливать путь к классам для каждого приложения, которое мы используем в данный момент (используйте в командной строке):
java -classpath C:\yourDirectoryPath myApp
Для ответа на второй вопрос посмотрите это упражнение в документации по java. Вроде та же проблема:
https://docs.oracle.com/javase/tutorial/essential/environment/QandE/answers.html
Ответы на вопросы и упражнения: среда платформы
Вопрос 1. Программист устанавливает новую библиотеку, содержащуюся в файле.jar. Чтобы получить доступ к библиотеке из своего кода, он устанавливает переменную среды CLASSPATH так, чтобы она указывала на новый файл.jar. Теперь он обнаруживает, что получает сообщение об ошибке, когда пытается запустить простые приложения:
java Hello Exception in thread "main" java.lang.NoClassDefFoundError: Hello
В этом случае класс Hello компилируется в файл.class в текущем каталоге, но команда java не может его найти. Что не так?
Ответ 1. Класс обнаруживается, только если он появляется в пути к классам. По умолчанию путь к классу состоит из текущего каталога. Если переменная среды CLASSPATH установлена и не включает текущий каталог, средство запуска больше не может находить классы в текущем каталоге. Решение состоит в том, чтобы изменить переменную CLASSPATH, чтобы включить текущий каталог. Например, если значением CLASSPATH является c:\java\newLibrary.jar (Windows) или /home/me/newLibrary.jar (UNIX или Linux), его необходимо изменить на.; C:\java\newLibrary.jar или.:/home/me/newLibrary.jar ".