繁体   English   中英

Gradle - 如何将依赖项打包到 jar 中

[英]Gradle - How pack dependencies into jar

我是 gradle 新手。

我有 Java 项目,具有 maven 依赖项和本地 Java 归档依赖项。 我想构建一个包含我的代码和所有依赖项的独立 jar。

我试过了

dependencies {
    runtime files(...)
    runtime group ...
}

当我稍后运行程序时使库可用,但它不起作用,它们在运行时不可用......

我也试过这个:

from("$projectDir") {
    include '../lib/**';
}

但没有成功......当我运行它时,java程序找不到依赖项(NoClassDefFoundError)。

回答你的问题:

我想构建一个包含我的代码和所有依赖项的独立 jar。

听起来您是在问如何在 Gradle 中构建“胖罐”。 您可以使用 JAR 任务执行此操作,如下所示:

jar {
     from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }  
     ...
}

第一行代码基本上说明“编译”依赖项配置下的所有配置的依赖项。 显然,如果您想包含的其他依赖项配置中有不同的依赖项,您也可以包含它们或代替它们,即

configurations.runtime.collect { ... }

在运行构建任务或任何创建 JAR 的任务后,您应该在相应的存档中找到所有项目的依赖 JAR。

适用于 gradle 5,原样:

task buildJar(type: Jar) {
    manifest {
        attributes(
                'Main-Class': 'org.mycompany.mainclass'             
        )
    }
    classifier = 'all'
    baseName = 'MyJar'
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
         }
            {
                exclude "META-INF/*.SF"
                exclude "META-INF/*.DSA"
                exclude "META-INF/*.RSA"
            }
    with jar
}

Jar 将被放置在./build/libs

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM