Mat*_*zok 21 multi-project gradle
我有很好的gradle配置,建立一切都很好.但是我的多项目构建中的一个项目来自其他项目,我很乐意将它移动到另一个git repo并配置子模块来处理它.
首先,我将Project及其资源移至子文件夹Libraries/MovedProject.在改变了gradle配置中的一些行后,它工作正常.但后来我决定为这个项目编写一个新的build.gradle,并将所有配置从主项目移到那里.
这就是一切都停止工作的地方.当我试图调用任何任务时,它总是以Could not find property 'sourceSets' on project ':Libraries/MovedProject'.负责的是:
dependencies {
...
if (noEclipseTask) {
testCompile project(':Libraries/MovedLibrary').sourceSets.test.output
}
}
Run Code Online (Sandbox Code Playgroud)
我用它来运行我使用其他项目的类的测试.如果我删除该行,则只有当它到达使用MovedProject的项目的compileTestJava任务时,构建才会失败.如果我删除该行并打电话,gradle :Libraries/MovedLibrary:properties我可以看到:
...
sourceCompatibility: 1.7
sourceSets: [source set main, source set test]
standardOutputCapture: org.gradle.logging.internal.DefaultLoggingManager@1e263938
...
Run Code Online (Sandbox Code Playgroud)
同时gradle :Libraries/MovedLibrary:build建立正确.
目前我已经设置了以下所有内容:
目录:
settings.gradle
include Libraries/MovedProject,
SomeMainProject1,
SomeMainProject2,
SomeMainProject3
Run Code Online (Sandbox Code Playgroud)MovedProject的sourceSets定义Libraries/MovedProject/project.gradle如下:
sourceSets {
main {
java {
srcDir 'src'
srcDir 'resources'
}
resources { srcDir 'resources' }
}
test { java {
srcDir 'test/unit'
} }
}
Run Code Online (Sandbox Code Playgroud)使用sourceSets.test.output的依赖项存储在Builder/dependancies.gradle每个需要MovedProject运行测试的项目中,并为其设置:
project(':SomeMainProject1') {
dependencies {
...
if (noEclipseTask) {
testCompile project(':Libraries/net.jsdpu').sourceSets.test.output
}
}
}
Run Code Online (Sandbox Code Playgroud)什么是摆脱该错误并使用当前目录结构制作gradle构建项目的最简单方法?我想明白为什么gradle看不到那个属性.
Pet*_*ser 20
有问题的行是有问题的,因为它使该项目的前提:Libraries/MovedLibrary是评估当前的项目,这可能并非如此前(不执行).如果不是,则其他项目的源集尚未配置.(甚至没有sourceSets属性,因为java-base插件尚未应用.)
一般而言,最好不要涉及其他项目的项目模型,特别是如果他们不是当前项目的子项目.对于使用项目B的测试代码的项目A,建议的解决方案是让项目B公开测试Jar(通过artifacts {}块),然后由项目A使用.
如果你想保持原样,你可以通过使用gradle.projectsEvaluated {}或解决问题project.evaluationDependsOn().有关更多信息,请参阅Gradle构建语言参考.
| 归档时间: |
|
| 查看次数: |
35816 次 |
| 最近记录: |