在我的Java项目中,我使用gradle进行依赖关系管理。我有一个主要类org.myorg.MainClass
,我可以让它与gradle run
运行。
然而,当我使用gradle assembly
生成jar
时,我无法让它在没有gradle的情况下运行。
java -jar assembly.jar
立即结束,没有结果。
我甚至补充道:
jar {
manifest {
attributes(
'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
'Main-Class': 'org.myorg.MainClass'
)
}
}
哪个有助于主类文件,但这没有帮助。
我也不喜欢这样的事实,即MainClass在gradle文件的不同部分重复 - 这意味着如果MainClass被更改,我将不得不在几个地方替换它。
您的主要问题可能是您的依赖项未被引入可执行的Jar文件,并且运行时无法在执行代码时找到它们。我只是根据你如何表达你的问题进行推测。
如果我是正确的,那么我认为你现在最好的选择是使用Shadow Jar插件(https://imperceptiblethoughts.com/shadow/introduction/)
Shadow是一个Gradle插件,用于将依赖类和资源与项目组合到一个输出Jar中。组合的Jar通常被称为胖罐或超级罐。 Shadow利用JarInputStream和JarOutputStream有效地将依赖库处理到输出jar中,而不会产生将jar扩展到磁盘的I / O开销。