分离构建的jar和依赖jar



应用程序插件将启动脚本复制到'bin'中,并将构建的jar和所有依赖项复制到'lib'中(见这里)。如何分离依赖jar和构建jar ?我想在根文件夹中有构建jar并相应地更改类路径。尝试更改"applicationdistribution";属性包含/排除,但这不起作用

I'm able do:

tasks.installDist {
from("$buildDir/libs") {
include("myLib*.jar")
}
doLast {
delete(fileTree("$buildDir/install/${project.name}/lib") {
include("myLib*.jar")
})
}
}

但这只适用于installDist,而不反映到distZip。我如何从"lib"文件夹移动jar,使其适用于installDist,distZip并更改classspath?类路径可能会在tasks.startScripts中更改,但因此jar应该正确移动。我正在使用Gradle Kotlin DSL。

期望的输出是这样的,其中mybuild .jar从lib移到根目录:
myProgram/
├── lib/
│   ├── lib1.jar
│   ├── lib2.jar
│   ├── ...
├── myProgram.bat
└── myBuilt.jar

找到解决方案了。我使用了eachFile(我以前不知道)并更改了目标目录:

distributions {
main {
contents {
eachFile {
if (sourceName.matches( Regex("myLib.*\.jar"))) {
relativePath = RelativePath(true,
*relativePath.parent.replaceLastName(sourceName).segments)
}
}
}
}
}

启动脚本的类路径必须手动更改,因为CreateStartScript硬编码了类路径并附加了"lib/"(参见这里)。

var jarFileName = ""; // is filled in tasks.jar with archiveFileName
tasks.startScripts {
doLast {
val windowsScriptContent = windowsScript.readText().replace("%APP_HOME%\lib\$jarFileName",
"%APP_HOME%\$jarFileName")
windowsScript.writeText(windowsScriptContent)
}
}

另一种方法是创建一个可运行的jar:将类路径插入到manifest中,并修改启动脚本模板。

最新更新