当前位置: 首页 > 知识库问答 >
问题:

Gradle multiproject给出“无法在项目上找到属性'source sets'”错误

孔鸿宝
2023-03-14

我有相当好的分级配置,这使一切都很好。但是我的多项目构建中的一个项目是从其馀的项目中派生出来的,所以我很乐意把它移到另一个git repo中,并配置子模块来处理它。

首先,我将Project及其资源移动到子文件夹libraries/movedproject中。在改变了梯度配置中的一些线后,它工作得很好。但后来我决定只为这个项目编写一个新的build.gradle,并将所有配置从主配置移到那里。

就在这里一切都停止了。当我尝试调用任何任务时,它总是以结尾:在项目“:libraries/movedproject”上找不到属性“source sets”。负责此操作的行为:

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

我用它来运行测试,在测试中我使用了来自其他项目的类。如果我移除该行,则生成仅在到达使用MovedProject的项目的compileTestJava任务时才会失败。如果删除该行并调用gradle:libraries/movedlibraries:properties,我可以看到:

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

gradle:libraries/movedlibrary:build则正确生成。

目前我已将所有内容设置如下:

>

  • 目录:

    • /SomeMainProject1
    • /SomeMainProject2
    • /SomeMainProject3
    • /库
      • /MovedProject
        • Build.Gradle
        • 依赖项.gradle
        • Project.Gradle
        • Tasks.Gradle
        • 依赖项.gradle
        • Project.Gradle
        • Tasks.Gradle

        设置.分级

        include Libraries/MovedProject,
                SomeMainProject1,
                SomeMainProject2,
                SomeMainProject3
        

        MovedProject的源集在库/MovedProject/Project.Gradle中定义:

        sourceSets {
            main {
                java {
                    srcDir 'src'
                    srcDir 'resources'
                }
                resources { srcDir 'resources' }
            }
            test { java {
                srcDir 'test/unit'
            } }
        }
        

        使用sourcesets.test.output的依赖项存储在builder/dependancies.gradle中,并为需要MovedProject运行测试的每个项目设置:

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

        最简单的方法是什么,以摆脱那个错误,使gradle构建项目与当前的目录结构?我想明白为什么gradle看不到那处房产。

  • 共有1个答案

    鞠通
    2023-03-14

    有问题的行是有问题的,因为它假设project:libraries/movedlibrary在当前项目之前被评估(而不是执行),情况可能并非如此。如果不是,则其他项目的源集将尚未配置。(甚至没有sourcesets属性,因为Java基插件还没有应用。)

    通常,最好不要接触其他项目的项目模型,特别是如果它们不是当前项目的子项目。在项目A使用项目B的测试代码的情况下,推荐的解决方案是让项目B公开一个测试Jar(通过artifacts{}块),然后由项目A使用该测试Jar。

    如果希望保持原样,可以使用Gradle.ProjectSevaluated{}Project.EvaluationDependson()解决此问题。有关更多信息,请参阅Gradle生成语言参考。

     类似资料:
    • 我尝试用构建我的Java项目,得到了以下内容: 的第25行:

    • 下面是我的config.yml的一部分: 我有一个用于解析的类: 然而,当我跑的时候 发生以下错误: 为什么它抱怨找不到属性AuthenticationConfig而AuthenticationConfig只是实例变量的名称? 更新在我将实例变量从“private”更改为“public”后,它们被SnakeYaml识别,但这并不是我们所能肯定的。类不被识别为JavaBean。 更新我找到了根本原因

    • 我试图建立一个具有以下依赖关系的应用程序。 这是我在红帽网站上找到的一个例子-http://www.jboss.org/quickstarts/eap/helloworld-jms/ 我正在使用Netbeans 8.0.2。(还在dos和eclipse中使用Maven命令进行了尝试)我在构建时遇到了一个错误,下面是相同的日志: 我可以在以下路径找到文件: https://maven.reposit

    • 我有一个实体叫做 我正在尝试使用criteriaBuilder和谓词进行搜索 我在这里得到了例外 我曾提出一些类似的问题,但我没有得到任何解决办法。

    • 为了避免在构建Java源代码时出现有关特殊字符的警告,我在中添加了这一行,在升级到Gradle2.0之前,这一行工作良好: 我该怎么解决呢?

    • 问题内容: 为了避免在构建Java源代码时出现有关特殊字符的警告,我将这一行放在我的行中,在升级到Gradle 2.0之前,该行运行良好: 升级后,失败并显示以下错误: 我该如何解决? 问题答案: 将行更改为 解决了这个问题。