我正在研究Apache Ant项目的演变,用Gradle编译它,我有不同的子项目集。
我的目标是将主项目的输出用作某些子项目的依赖项。全局配置如下:
MainProject:
-> src/main/java
-> src/main/resources
-> src/test/java
-> src/test/resources
-> src/mocks/java
ChildProject1:
-> src/main/java
-> src/main/resources
-> src/test/java
-> src/test/resources
-> src/mocks/java
主项目正确包含在子构建路径中,并且在Eclipse链接时可以正确找到所有链接。
我已将settings.gradle
文件中的主项目包含在ChildProject
及其在构建中的依赖项中:
dependencies {
compile project(':MainProject')
}
我的问题是ChildProject
需要来自mocks / java的输出才能编译,虽然看起来Gradle编译过程确实包含"默认"作为主/ java文件的输出,我收到一条错误消息,说明"符号"从模拟中找不到。
我在MainProject
测试java文件编译中遇到类似的问题需要使用模拟,它通过添加来解决:
sourceSets {
mocks {
java {
srcDir 'src/mocks/java'
}
compileClasspath += sourceSets.main.runtimeClasspath
}
test {
compileClasspath += sourceSets.mocks.output
runtimeClasspath += sourceSets.mocks.output
}
}
模拟源正确添加到测试类路径中。
如何告诉我的ChilProject
使用MainProject
的模拟输出来编译测试?
答案 0 :(得分:1)
我会试着指出你正确的方向。通常,您在Gradle中声明多项目依赖项,如下所示:
dependencies {
compile project(':projA')
}
这个定义隐含地说使用default
的{{1}}工件作为依赖。
我相信您想要的是使用projA
依赖项的mock
工件。这样做的方法是:
创建一个新的projA
任务,以组合从jar
和main
sourceSet编译的类文件。
mock
通过创建名为task mocksJar(type: Jar) {
classifier 'mocks'
group 'build'
from sourceSets.main.output
from sourceSets.mocks.output
}
的新Gradle配置并指定要导出的工件来导出mock
版本中的projA
工件:
mocks
使用扩展依赖语法在项目中导入需要configuration { mocks }
artifacts.mocks mocksJar
的{{1}}配置:
mocks