Нужны ли для работы файла .jar все классы, установленные на машине?

Нужны ли для работы файла .jar все классы, установленные на машине? Например: если я когда-либо распространю программу в виде файла .jar, нужно ли мне также установить все мои файлы .class на машине пользователя? Если да, есть ли способ распространить Java-программу в виде одного файла (например, исполняемого файла)?


person Serket    schedule 30.08.2020    source источник
comment
На основе комментария в ответе: почему я получаю это сообщение: Ошибка: не удалось найти или загрузить основной класс Server Вызвано: java.lang.ClassNotFoundException: Server, этот вопрос задавали много на SO: Как исправить ClassNotFoundException? Есть ли эта справка в качестве отправной точки? В противном случае могут потребоваться дополнительные сведения о том, как вы создаете и запускаете свою программу.   -  person andrewjames    schedule 31.08.2020


Ответы (3)


Классы скомпилированы в файл .jar, поэтому нет необходимости устанавливать их на каждой машине. И да, есть способ распространять исполняемый файл .jar.

person scaldings    schedule 30.08.2020
comment
Если классы скомпилированы в файл .jar, то почему я получаю это сообщение: Error: Could not find or load main class Server Caused by: java.lang.ClassNotFoundException: Server Каждый раз, когда я запускаю файл .jar с классом Server в другой папке? - person Serket; 31.08.2020
comment
Если вы получаете сообщение об ошибке java.lang.ClassNotFoundException, скорее всего, класс отсутствует в вашем файле .classpath. - person scaldings; 31.08.2020
comment
Я задал новый вопрос по этому поводу. Вот ссылка: stackoverflow.com/questions/63663114/ - person Serket; 31.08.2020

Это зависит от того, как вы построили банку. Классы в вашем банке могут зависеть от других классов в вашей банке и / или от классов в других банках, установленных в вашей системе. В последнем случае они, вероятно, не будут работать, если вы раздадите банку другим пользователям.

Вам необходимо убедиться, что создаваемый и распространяемый вами jar-файл содержит все используемые вами зависимости. Я слышал, что здесь может помочь Maven.

person Antimony    schedule 30.08.2020

На самом деле файл .jar - это нормально. Вы можете выполнить это с помощью java -jar jarFile.

Содержит ли ваш jar все классы для запуска jar, зависит от того, как вы его создали.
Вы можете упаковать все дененденции в jar, который называется толстым jar, или вы можете просто объявить свои зависимости и просто упаковать свой собственный класс в банку с инструментами сборки, такими как maven или gradle. Позже пользователь может загрузить зависимость с помощью того же инструмента сборки. Обычно более поздний способ лучше.

person haoyu wang    schedule 31.08.2020
comment
Только если манифест содержит запись Main-Class - person René Link; 31.08.2020