无渐变的“渐变运行”

时间:2019-04-26 22:00:11

标签: java gradle

在我的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被更改,我将不得不在多个地方替换它。

1 个答案:

答案 0 :(得分:1)

您的主要问题可能是您的依赖项未引入可执行的Jar文件中,并且运行时在执行代码时找不到它们。我只是基于您如何提出问题进行推测。

如果我是正确的话,那么我认为目前最好的选择是使用Shadow Jar插件(https://imperceptiblethoughts.com/shadow/introduction/

  

Shadow是Gradle插件,用于将依赖项类和资源与项目组合到单个输出Jar中。合并的Jar通常被称为胖jar或超级jar。 Shadow利用JarInputStream和JarOutputStream将依赖的库有效地处理到输出jar中,而不会产生将jar扩展到磁盘的I / O开销。