如何从命令提示符生成jar文件

时间:2017-02-02 09:33:12

标签: java cmd jar

我一直在尝试为我的gradle项目制作jar文件,但总是发现错误 could not find or load main class CalculatorServer

我的compile (.class)文件位于Windows文件系统的以下路径中 D:\Projects\EclipseProjects\CalculatorGRPC\build\classes\main\com\grpc\calculator

当我尝试使用folloiwng命令为主类创建jar文件时,例如CalculatorServer

D:\Projects\EclipseProjects\CalculatorGRPC\build\classes\main\com\grpc\calculator>java -cp test.jar com.test.calc.CalculatorServer

发生以下错误 could not find or load main class CalculatorServer

修改

抱歉,我在这里发布了错误的命令。

我创建jar文件的命令如下

D:\Projects\EclipseProjects\CalculatorGRPC\build\classes\main\com\grpc\calculator> echo Main-Class: CalculatorServer >manifest.txt D:\Projects\EclipseProjects\CalculatorGRPC\build\classes\main\com\grpc\calculator>jar cvfm CalculatorServer.jar manifest.txt *.class

当我运行这个jar文件时

`D:\Projects\EclipseProjects\CalculatorGRPC\build\classes\main\com\grpc\calculator>java -jar CalculatorServer.jar

获得相同的错误

could not find or load main class CalculatorServer

1 个答案:

答案 0 :(得分:0)

你在错误的目录中。无论你想做什么,只要该操作涉及编译的类文件,你应该在输出根目录,即XXXXX\build\classes\main文件夹。

原因是java类加载器 如果命令加载名为/com/foo/Bar.class的类,将尝试在jar中查找com.foo.Bar。如果您只是打包这样的jar,那么jar工具会将您的类放在输出存档的根目录中(您可以通过使用7z等存档工具进行调查来确认),这会使类加载器发生混乱并给您一个错误

通过may,manifest应该被命名为MENIFEST.MF adn放在/ META-INF目录下,否则如果你的清单是以正确的格式写的话,会再次弹出相同的错误。

PS:你为什么要用拳头做这些事?这就是gradle应该做的,或者为什么称为构建自动化?在/build/目录下的某个地方应该有您想要的jar文件,通常为/build/lib/