Java `gradle run`没有gradle

Java `gradle run`没有gradle,java,gradle,Java,Gradle,在我的Java项目中,我使用gradle进行依赖关系管理。我有一个主类org.myorg.MainClass,我可以让它与gradlerun一起运行 然而,当我使用gradleassembly生成jar时,如果没有gradle,我无法让它运行 java-jar assembly.jar立即结束,没有结果 我甚至补充说: jar { manifest { attributes( 'Class-Path': configurations.com

在我的Java项目中,我使用gradle进行依赖关系管理。我有一个主类
org.myorg.MainClass
,我可以让它与
gradlerun
一起运行

然而,当我使用
gradleassembly
生成
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插件()

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


作为一个小提示,您可以将
it.getName()
简化为
it.name
,并将整个过程简化为
配置。编译*.name.join(“”)
。您可以在
jar
任务配置(即
'Main-Class':mainClassName
)中使用
mainClassName
(从
应用程序
插件)。