我从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 :(得分:6)
您似乎将多个JAR文件传递给java application launcher。这不是它的工作原理。
你需要传入一个单独的jar文件(本例中为MyProject.jar),它作为入口点。应在主jar的manifest MANIFEST.MF的ClassPath条目中指定所有相关的JAR。清单还应指定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的位置更新用于启动应用程序的上述命令。
答案 1 :(得分: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
答案 2 :(得分:2)
-cp
指定类路径.jar
扩展名您的结果命令是:
java -cp ..\dist\MyProject.jar;..\lib\* com.my.test.MainTest
Related question有启发性的答案。