Как скомпилировать проект java с внешним файлом jar в терминале Linux

У меня есть проект, который включает в себя внешний файл jar, я пошел по этой ссылке http://www.wikihow.com/Add-JARs-to-Project-Build-Paths-in-Eclipse-%28Java%29 чтобы добавить внешний путь java. Затем я попытался скомпилировать свой код в терминале, однако я все еще получаю ошибку о файле jar не существует.

Я написал следующие команды: (в настоящее время я нахожусь в каталоге проекта, и там есть три папки с именем bin src и lib)

bash-3.2$ ls
bin  lib  README.txt  src
bash-3.2$ javac -cp lib/jsoup-1.6.1.jar src/DayTradingStockBlog.java
bash-3.2$ java -cp .:lib/jsoup-1.6.1.jar src/DayTradingStockBlog
Exception in thread "main" java.lang.NoClassDefFoundError: src/DayTradingStockBlog (wrong name: DayTradingStockBlog)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access0(URLClassLoader.java:58)
        at java.net.URLClassLoader.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: src/DayTradingStockBlog.  Program will exit.

Как должен ли я решить эту проблему ?

4 ответов


вы никогда не используете косые черты, которые являются разделителями пути, в вызове java (но javac). Если src является частью вашей декларации пакета - в этом случае вся декларация пакета, которую я держу пари, что это не так, вы бы вместо:

 java -cp .:lib/jsoup-1.6.1.jar src/DayTradingStockBlog

использовать многоточие:

 java -cp .:lib/jsoup-1.6.1.jar src.DayTradingStockBlog

но я думаю, что это просто место, где вы создали класс, так что путь принадлежит к classpath:

 java -cp .:lib/jsoup-1.6.1.jar:./src DayTradingStockBlog

вы не можете опустить путь из имени класса и добавить его в classpath, или наоборот - он должен соответствовать вашей декларации пакета.

если вы объявляете пакет foo, (что имеет гораздо больше смысла, чем src), ваше имя класса больше не DayTradingStockBlog но foo.DayTradingStockBlog.


основываясь на вашем редактировании, я бы предложил вам заключить все местоположения classpath в одинарные/двойные кавычки. То есть, сделайте это как

java -cp '.:lib/jsoup-1.6.1.jar' src/myClass.

в linux элементы пути к классам разделяются двоеточием (:), а в Windows-точкой с запятой (;).


использовать classpath (- cp)

javac -cp %YOUR_JAR_LOCATION% myClass.java 

вы должны поместить файл java и файл jar в один и тот же каталог пример: javac-cp jdbc.фляги класса MyClass.Ява это работает для меня