在java中从批处理文件运行jar

时间:2011-06-06 22:13:46

标签: java jar

我从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

...谢谢

3 个答案:

答案 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)

  1. 使用-cp指定类路径
  2. 删除通配符的.jar扩展名
  3. 您的结果命令是:

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

    Related question有启发性的答案。