簡體   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