Как скомпилировать проект java с внешним файлом jar в терминале Linux - PullRequest
6 голосов
/ 08 февраля 2012

У меня есть проект, который включает в себя внешний файл 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.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.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 ]

10 голосов
/ 09 февраля 2012

Вы никогда не используете косые черты, которые являются разделителями пути, при вызове Java (но не JAVAC).Если src является частью вашего объявления пакета - в этом случае все объявление пакета, которое, я уверен, это не так, вместо:

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

используйте точку:

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

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

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

Вы не можете пропустить путь из имени класса и добавить егов classpath или наоборот - он должен соответствовать объявлению вашего пакета.

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

2 голосов
/ 09 февраля 2012

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

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

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

1 голос
/ 08 февраля 2012

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

javac -cp %YOUR_JAR_LOCATION% myClass.java 
0 голосов
/ 03 ноября 2015

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

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