Gradle - 如何将依赖包装到jar中

时间:2014-08-20 12:41:33

标签: java jar gradle dependencies

我是新手。

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

我试过

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

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

我也试过这个:

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

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

2 个答案:

答案 0 :(得分:4)

回答你的问题:

  

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

这听起来像是在问你如何建造一个"胖罐"在Gradle。您可以使用JAR任务执行此操作:

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

第一行代码基本上表示" jar up" "编译"下的所有已配置依赖项依赖配置。显然,如果你想要包含的其他依赖配置中有不同的依赖关系,你也可以包含它们或代替它们,即

configurations.runtime.collect { ... }

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

答案 1 :(得分:0)

按原样在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
}

瓶子将放在./build/libs