2012-02-08 37 views
5

我有一个包含外部jar文件的项目,我跟着这个链接http://www.wikihow.com/Add-JARs-to-Project-Build-Paths-in-Eclipse-%28Java%29添加了外部java路径。然后我试图在终端中编译我的代码,但是我仍然得到关于jar文件不存在的错误。如何在Linux终端中用外部jar文件编译java项目

我写了下面的命令:(目前我在项目目录中有三个文件夹名为斌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. 

我应该如何解决这个问题?

+0

什么* *究竟不错误说什么? – 2012-02-08 19:48:19

+0

你是如何编译的? – 2012-02-08 19:49:02

+0

包org.jsoup不存在 import org.jsoup.Jsoup; – CanCeylan 2012-02-08 19:49:20

回答

9

在调用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 

你不得随意省略从类名的路径,并将其追加到类路径,或副相反 - 它必须fi t到你的包装声明。

如果您声明一个包foo(它比src更有意义),那么您的类名不再是DayTradingStockBlog,而是foo.DayTradingStockBlog

+0

+1,以正确使用调用“打包类”(使用点)。 – asgs 2012-02-12 14:40:10

1

使用类路径(-cp)

javac -cp %YOUR_JAR_LOCATION% myClass.java 
+0

你可以看一下编辑请求 – CanCeylan 2012-02-08 20:04:14

+0

@CanCeylan进入jar DIRECTORY目录(Linux中没有文件夹)并提供访问权限:chmod 777 ./jsoup-1.6.1.jar然后再次运行javac – aviad 2012-02-08 20:12:06

+0

@aviad这就是不是问题。你不想让它的权限变为777,只是为了在类路径中创建库。 – asgs 2012-02-08 20:17:26

2

根据您的修改,我建议你附上单/双引号内的所有类路径的位置。也就是说,让它像

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

在linux中,类路径中的项用冒号(:)分隔,在Windows中则是分号(;)。

+0

bash-3.2 $ javac -cp lib /jsoup-1.6.1.jar src/myClass.java bash-3.2 $ java -cp。: lib/jsoup-1.6.1.jar src/myClass – CanCeylan 2012-02-08 20:18:33

+0

现在我尝试了这些命令,但是第一个工作正常,但是第二个在线程“main”java.lang.NoClassDefFoundError中提供了异常:src/myClass(错误名称: myClass) – CanCeylan 2012-02-08 20:19:16

+0

@CanCeylan这是因为myClass不在src包下。我想你已经做好了。只要让它成为myClass。 – asgs 2012-02-08 20:20:41

-2

,你应该把在同一目录 例如Java文件和jar文件:javac的-cp了jdbc.jar myClass.java 它为我工作

+1

这是没有用的,假设你有多个程序全部使用相同的外部JAR,你是否每次都制作JAR的副本? – CyprUS 2015-12-04 05:44:00

相关问题