Как скомпилировать проект 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-точкой с запятой (;).
вы должны поместить файл java и файл jar в один и тот же каталог пример: javac-cp jdbc.фляги класса MyClass.Ява это работает для меня