应用程序插件将启动脚本复制到'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。
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中,并修改启动脚本模板。