Что такое путь к классу в 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. Параметр может быть установлен либо в командной строке, либо через переменную окружения.

Пути к классам содержат:

  1. JAR-файлы и

  2. Пути к вершине иерархии пакетов.

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 ".

Другие вопросы по тегам