2011-06-06 164 views
1

我有问题从jar中运行主类。从java批处理文件运行jar

Ant脚本产生了以下文件夹:

MyProject(Somewhere in C:) 
| 
| 
|____configuration(this contains properties/XML file) 
| 
|____dist(contains MyProject.jar) 
| 
|____lib(contains all other jars) 
| 
|____run(contains batch file to run MyProject.jar) 

内运行文件夹我有一个批处理文件,其内容是这样的:

java -jar ../dist/MyProject.jar;../lib/*.jar com.my.test.MainTest 

有人可以指导我。 我只想去运行文件夹并双击.bat文件并运行应用程序。

我越来越

Exception in thread "main" java.lang.NoClassDefFoundError: MyProject/jar 

更新

新的错误是:

The java class is not found: com.microsoft.sqlserver.jdbc.SQLServerException 

谢谢...

+0

这是什么问题? – 2011-06-06 22:15:35

回答

2

使用-cp(或-classpath)代替-jar:

java -cp ../dist/MyProject.jar;../lib/*.jar com.my.test.MainTest 

-jar选项用于运行.jar文件,该文件要求.jar文件必须包含指示要执行哪个类的清单。但是在这里你不需要,因为你已经提供了类来运行(com.my.test.MainTest)。

更新:

由于@Rob提到,在类路径中使用通配符的方式就是 '*',而不是 '的* .jar',让你真正想要的:

java -cp ../dist/MyProject.jar;../lib/* com.my.test.MainTest 
+0

我收到了问题中描述的上述异常。 – user234194 2011-06-06 22:21:58

+0

我觉得罐子没有装在我的箱子里。 – user234194 2011-06-06 23:13:06

2
  1. 使用-cp指定类路径
  2. 为通配符
取出 .jar扩展

你得到的命令是:

java -cp ..\dist\MyProject.jar;..\lib\* com.my.test.MainTest 

Related question与启发性的答案。

+0

我尝试过,但它仍然给我错误。 – user234194 2011-06-06 23:13:50

6

看来你正在将多个JAR文件传递给java application launcher。这不是它的工作原理。

你需要传入一个单独的jar文件(在这种情况下是MyProject.jar),它用作入口点。所有相关的JAR应在主jar的manifest MANIFEST.MF的ClassPath条目中指定。清单还应指定Main类 - 具有main()方法的类。

如果要避免上述情况,并在命令行上指定完整的类路径,请使用-cp-classpath标志。但是,您需要在类路径中使用specify wildcards,方式与问题中列出的方式不同。以下可能有效;在Windows上,如果需要用引号括类路径条目:

REM notice the quotes in the cp argument. Those are to be omitted in *nix 
java -cp "../dist/MyProject.jar;../lib/*" com.my.test.MainTest 

更新

立足现在报道的新的错误消息,看来该Microsoft SQL Server JDBC Driver是不存在的类路径。这需要下载并放置必要的JAR(在lib目录中)。如果驱动程序存在于其他地方,那么用于启动应用程序的上述命令应该更新为JAR的位置。

+0

它抱怨在lib文件夹中的jar ....它说没有找到类。 – user234194 2011-06-06 23:12:18

+0

什么是新错误?你可以在问题中发布新的堆栈跟踪吗?这将有所帮助。 – 2011-06-06 23:16:55

+0

我已经更新了我的新错误的问题,谢谢..... – user234194 2011-06-06 23:37:15