我一直在尝试为我的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
答案 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/
。