在我的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'
)
}
}
哪个帮助了主类文件,但没有帮助。
我也不喜欢在Gradle文件的不同部分重复MainClass的事实-这意味着如果MainClass被更改,我将不得不在多个地方替换它。
答案 0 :(得分:1)
您的主要问题可能是您的依赖项未引入可执行的Jar文件中,并且运行时在执行代码时找不到它们。我只是基于您如何提出问题进行推测。
如果我是正确的话,那么我认为目前最好的选择是使用Shadow Jar插件(https://imperceptiblethoughts.com/shadow/introduction/)
Shadow是Gradle插件,用于将依赖项类和资源与项目组合到单个输出Jar中。合并的Jar通常被称为胖jar或超级jar。 Shadow利用JarInputStream和JarOutputStream将依赖的库有效地处理到输出jar中,而不会产生将jar扩展到磁盘的I / O开销。