Eclipse 如何允许/解决嵌套复合渐变生成

Eclipse 如何允许/解决嵌套复合渐变生成,eclipse,gradle,buildship,Eclipse,Gradle,Buildship,我遇到了与报道相同的问题: 我有一个Java项目a,它依赖于项目B(模块),并且 项目B依赖于项目C(另一个模块)。A I项目 要为项目B和I设置“IncludeFild../projectB” 想要设置“IncludeFild../projectC”,以便 在Eclipse+Buildship 2.0中开发所有内容,无需运行 项目A、B和C中每一个小变化的梯度 但是,如果我设置了它,我会得到:“包含的生成“%s”不能包含 建立” 预期行为 递归的“IncludeFild”将递归地包含依赖项目

我遇到了与报道相同的问题:

我有一个Java项目a,它依赖于项目B(模块),并且 项目B依赖于项目C(另一个模块)。A I项目 要为项目B和I设置“IncludeFild../projectB” 想要设置“IncludeFild../projectC”,以便 在Eclipse+Buildship 2.0中开发所有内容,无需运行 项目A、B和C中每一个小变化的梯度

但是,如果我设置了它,我会得到:“包含的生成“%s”不能包含 建立”

预期行为

递归的“IncludeFild”将递归地包含依赖项目

当前行为

我得到“包含的生成“%s”不能包含生成。”

你的环境

Gradle 3.5、Buildship 2.0、Eclipse 3.6

我如何解决/解决此问题?在我的实例中,我有一个包含电子邮件功能的实用程序项目(使用JavaMail)。在数据项目和UI项目中需要电子邮件功能。UI项目也取决于数据项目。

您考虑过吗

  • 确保各个构建都不是复合构建
  • 拥有一个“优步”构建,它是所有东西的组合
  • 请注意,
    settings.gradle
    本身就是一个groovy脚本,因此您可以创建一个动态组合,例如在父文件夹下具有build.gradle的所有子文件夹

    uber/settings.gradle

    新文件(“c:/someFolder”).listFiles()。每个{File f->
    如果(f.directory&&new文件(f'build.gradle').exists()){
    包括
    }
    }
    
    乙二醇


    为不同的方法添加另一个答案

    每个
    settings.gradle
    都可以在
    includebild
    之前添加一个检查,以查看它是否已经在组合中。如果它已经在组合中,则它不会
    includebild

    有关复合检查的更多信息,请参阅

    乙二醇

    project2/settings.gradle

    boolean inComposite=gradle.parent!=无效的
    如果(!不完整){
    INCLUDEBILD'../project1'
    }
    
    project3/settings.gradle

    boolean inComposite=gradle.parent!=无效的
    如果(!不完整){
    INCLUDEBILD'../project1'
    INCLUDEBILD'../project2'
    }
    
    project4/settings.gradle

    boolean inComposite=gradle.parent!=无效的
    如果(!不完整){
    INCLUDEBILD'../project1'
    INCLUDEBILD'../project2'
    includeFild'../project3'
    }
    
    等等


    使用这种方法,您可以从任何您喜欢的地方运行
    gradle
    ,并且它应该按照预期的方式运行(即用本地项目替换依赖项)

    实际上这有点令人困惑。你能用文件夹结构演示一下吗。以上述案例为例。非常感谢,请参阅示例文件夹结构。基本上,您会将所有单个项目签出到一个公共文件夹中。然后,
    uber
    build将它们组合在一起。如果您想将
    uber
    项目放在同一个文件夹中,您可以在
    settings.gradle
    中为它添加一个排除项来停止它,包括它自己谢谢您的解释。但是通过这种方式,我不能将project1作为project2的依赖项。是的,你可以。project2将通过
    GAV
    (组、工件、版本)引用project1。如“如果组合中的任何构建都具有包含的构建可以满足的依赖关系,那么该依赖关系将被包含的构建上的项目依赖关系所取代”中所述。注意:您可以通过uber构建运行所有命令以从组合中获益。从单个构建运行gradle将从存储库而不是组合中获取依赖项
    c:/someFolder/project1/build.gradle
    c:/someFolder/project1/src/main/java/**/*.java
    c:/someFolder/project2/build.gradle
    c:/someFolder/project2/src/main/java/**/*.java
    c:/uber/settings.gradle (as above)