我有一个包含多个包的Gradle项目。构建完成后,每个包都会在build/libs中生成其jar文件。外部的jar依赖项被拉入~/.gradle中。我现在想要通过命令行在本地运行服务,并使用正确的类路径。为此,我正在编写一个脚本来构建类路径。问题在于,该脚本无法理解所有外部依赖关系,因此无法构建类路径。Gradle是否有办法帮忙解决这个问题?理想情况下,我想在构建结束时将所有依赖项转储到一个文件夹中。
首先,如果可以的话,我建议使用应用程序插件,因为它已经处理了这个问题。
如果你想自己将类路径转储到文件中,最简单的方法是:
task writeClasspath << {
buildDir.mkdirs()
new File(buildDir, "classpath.txt").text = configurations.runtime.asPath + "\n"
}
如果你想实际复制类路径上的所有库到一个目录中,可以执行以下操作:
task copyDependencies(type: Copy) {
from configurations.runtime
into new File(buildDir, "dependencies")
}
// add an action to the build task that creates a startup shell script
build << {
File script = file('start.sh')
script.withPrintWriter {
it.println '#!/bin/sh'
it.println "java -cp ${getRuntimeClasspath()} com.example.Main \"\$@\""
}
// make it executable
ant.chmod(file: script.absolutePath, perm: 'u+x')
}
String getRuntimeClasspath() {
sourceSets.main.runtimeClasspath.collect { it.absolutePath }.join(':')
}
sourceSets.main.runtimeClasspath
基本上是一个 FileCollection
,其中包含指向 1) 构建输出文件夹 (build/classes/main
, build/references/main
等) 和 2) 外部 jar 依赖项的 File 对象,无论它们在哪个存储库中。您可以轻松地遍历此集合并将 jar 复制到任意文件夹中。 - zagyi