[英]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.