摇篮多重给出“找不到项目属性“sourceSets”错误(Gradle multiproject g

2019-07-21 08:44发布

我有不少好gradle这个配置,即内置一切就好了。 但是从他们的休息得出这么多我的多项目构建的项目,那我会很乐意将其移动到另一个混帐回购协议,并配置子模块来处理它的一个。

首先,我搬到项目及其资源到子文件夹Libraries/MovedProject 。 在改变的gradle配置一些线后,它工作得很好。 但后来我决定写一个新的build.gradle只是为了这个项目,并从主一个有移动的所有配置。

而这正是一切停止工作。 当我尝试调用任何任务它总是与结束Could not find property 'sourceSets' on project ':Libraries/MovedProject' 。 行负责,它是:

dependencies {
    ...
    if (noEclipseTask) {
        testCompile project(':Libraries/MovedLibrary').sourceSets.test.output
    }
}

我使用的运行中,我使用类其他项目的测试。 如果我删除了这一行,构建只有当它达到的是利用MovedProject项目compileTestJava任务失败。 如果删除该行并调用gradle :Libraries/MovedLibrary:properties ,我可以看到:

...
sourceCompatibility: 1.7
sourceSets: [source set main, source set test]
standardOutputCapture: org.gradle.logging.internal.DefaultLoggingManager@1e263938
...  

gradle :Libraries/MovedLibrary:build正确的基础之上。

目前,我就拥有了一切设置如下:

  1. 目录:

    • / SomeMainProject1
    • / SomeMainProject2
    • / SomeMainProject3
    • /库
      • / MovedProject
        • 的build.gradle
        • dependencies.gradle
        • project.gradle
        • tasks.gradle
    • /生成器
      • dependencies.gradle
      • project.gradle
      • tasks.gradle
    • 的build.gradle
    • settings.gradle
  2. settings.gradle

     include Libraries/MovedProject, SomeMainProject1, SomeMainProject2, SomeMainProject3 
  3. 对于MovedProject sourceSets定义在Libraries/MovedProject/project.gradle

     sourceSets { main { java { srcDir 'src' srcDir 'resources' } resources { srcDir 'resources' } } test { java { srcDir 'test/unit' } } } 
  4. 依赖,使得使用sourceSets.test.output都存储在Builder/dependancies.gradle ,并为需要MovedProject运行测试每个项目:

     project(':SomeMainProject1') { dependencies { ... if (noEclipseTask) { testCompile project(':Libraries/net.jsdpu').sourceSets.test.output } } } 

什么是最简单的方法来摆脱错误的,并与当前的目录结构gradle这个构建项目? 我想知道为什么gradle这个看不到属性。

Answer 1:

所讨论的线路是有问题的,因为它使该项目的假设:Libraries/MovedLibrary当前项目,这可能不是这种情况之前进行评估 (不执行)。 如果不是的话,源组其他项目将还没有被配置。 (这里甚至不会是一个sourceSets因为物业java-base插件尚未使用。)

一般情况下,最好不要把触角伸到其他项目的项目模型,特别是如果它们不是当前项目的儿童。 在使用项目B的测试代码项目A的情况下,推荐的解决方案是让项目乙暴露的测试瓶(通过artifacts {}块),然后由项目A.消耗

如果你想保持事物的本来面目,您可以通过使用来解决此问题gradle.projectsEvaluated {}project.evaluationDependsOn() 见摇篮构建语言参考以获取更多信息。



文章来源: Gradle multiproject gives “Could not find property 'sourceSets' on project” error