如何在单个构建中将一个Gradle子项目生成的jar复制到另一个项目中

如何在单个构建中将一个Gradle子项目生成的jar复制到另一个项目中,gradle,Gradle,当使用复制任务时,多项目Gradle构建(下面的最小复制)似乎无法从一个项目中提取jar文件并将其作为jar文件导入另一个项目 生成文件: buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "gradle.plugin.com.dorongold.

当使用复制任务时,多项目Gradle构建(下面的最小复制)似乎无法从一个项目中提取jar文件并将其作为jar文件导入另一个项目

生成文件:

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
            }
        }
    }