如何在单个构建中将一个Gradle子项目生成的jar复制到另一个项目中
当使用复制任务时,多项目Gradle构建(下面的最小复制)似乎无法从一个项目中提取jar文件并将其作为jar文件导入另一个项目 生成文件:如何在单个构建中将一个Gradle子项目生成的jar复制到另一个项目中,gradle,Gradle,当使用复制任务时,多项目Gradle构建(下面的最小复制)似乎无法从一个项目中提取jar文件并将其作为jar文件导入另一个项目 生成文件: buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "gradle.plugin.com.dorongold.
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "gradle.plugin.com.dorongold.plugins:task-tree:1.5"
}
}
subprojects { subproject ->
subproject.apply plugin: com.dorongold.gradle.tasktree.TaskTreePlugin
}
project(":jarBuild") {
apply plugin: "java"
}
project(":assemblyBuild") {
apply plugin: "maven"
configurations {
compile
}
dependencies {
compile(project(path: ":jarBuild"))
}
task copyFiles {
copy {
from configurations.compile
into buildDir
}
}
copyFiles.dependsOn(project(':jarBuild').tasks.assemble)
build.dependsOn(copyFiles)
}
task clean
clean.dependsOn(subprojects.collect { it.tasks.matching { it.name == "clean" } })
此命令演示了以下问题:
gradle clean && gradle build && find . -name '*.jar' && gradle build && find . -name '*.jar'
命令输出:
BUILD SUCCESSFUL in 594ms
2 actionable tasks: 2 executed
BUILD SUCCESSFUL in 617ms
1 actionable task: 1 executed
./jarBuild/build/libs/jarBuild.jar
BUILD SUCCESSFUL in 590ms
1 actionable task: 1 up-to-date
./assemblyBuild/build/jarBuild.jar
./jarBuild/build/libs/jarBuild.jar
在第一次build
之后,assemblyBuild
的build目录中没有打包的jar。在第二次运行build
时,复制jar
已验证任务相关性是否正确:
gradle :assemblyBuild:build taskTree
> Task :assemblyBuild:taskTree
------------------------------------------------------------
Project :assemblyBuild
------------------------------------------------------------
:assemblyBuild:build
+--- :assemblyBuild:assemble
+--- :assemblyBuild:check
\--- :assemblyBuild:copyFiles
\--- :jarBuild:assemble
\--- :jarBuild:jar
\--- :jarBuild:classes
+--- :jarBuild:compileJava
\--- :jarBuild:processResources
我尝试了很多不同的方法,包括通过引用直接路径复制jar文件,但都没有成功。我找到了答案。复制命令正在任务配置期间执行,而不是执行。将该任务定义替换为以下内容:
task copyFiles {
doLast {
copy {
from configurations.compile
into buildDir
}
}
}
我想出来了。复制命令正在任务配置期间执行,而不是执行。将该任务定义替换为以下内容:
task copyFiles {
doLast {
copy {
from configurations.compile
into buildDir
}
}
}