Gradle新手求教:如何将同级项目编译的Jar复制到指定目录?
同级Gradle项目Jar文件复制实现方案
假设你的项目目录结构如下:
root/ ├── projectA/ │ ├── build.gradle │ └── src/ └── projectB/ ├── build.gradle └── src/
1. 配置多项目构建(根目录操作)
在两个项目的共同根目录下新建settings.gradle文件,添加以下内容:
include ':projectA', ':projectB'
这一步让Gradle将两个项目纳入同一个构建体系,方便后续任务依赖和文件引用。
2. 给项目A添加复制任务
打开projectA目录下的build.gradle,插入以下任务配置:
// 定义复制任务,命名为copyProjectBJar task copyProjectBJar(type: Copy) { // 源文件:指向projectB编译生成的Jar包 from project(':projectB').jar.archiveFile // 目标目录:替换成你需要的projectA内的指定路径,示例为测试资源目录下的libs文件夹 into "${projectDir}/src/test/resources/libs" } // 让测试任务依赖复制任务,确保运行测试前Jar已就位 test.dependsOn copyProjectBJar
代码说明
type: Copy:使用Gradle内置的复制任务类型,无需自己实现复制逻辑from:指定要复制的源文件,project(':projectB').jar.archiveFile会自动指向projectB编译后生成的Jar文件(适配版本号或路径变化)into:设置Jar要复制到的目标目录,${projectDir}代表projectA的根目录,按需修改路径即可test.dependsOn copyProjectBJar:绑定测试任务和复制任务,运行测试时会自动先执行复制操作
3. 执行任务
- 手动执行复制任务:在根目录下运行
./gradlew :projectA:copyProjectBJar
- 直接运行测试(会自动先完成Jar复制):在根目录下运行
./gradlew :projectA:test
备选方案(无多项目构建)
如果不想用多项目构建,可直接指定projectB的Jar路径,但这种方式需要手动确保projectB已编译:
task copyProjectBJar(type: Copy) { from '../projectB/build/libs/projectB-*.jar' // 用通配符匹配Jar文件 into "${projectDir}/src/test/resources/libs" }
执行前需先编译projectB:
cd ../projectB && ./gradlew jar && cd ../projectA ./gradlew copyProjectBJar
这种方式灵活性差,不推荐用于长期维护。
内容的提问来源于stack exchange,提问作者BlockyPenguin
相关产品推荐
相关产品推荐

