Gradle multiproject不会将项目添加到类路径

时间:2016-05-05 16:28:01

标签: gradle build.gradle

我有一些依赖他人的项目。我还有一个项目依赖于两个项目,每个项目依赖于同一个项目。像这样:

-Project A
 * Project 1
  ** Project C
 * Project 2
  ** Project C

工作区的结构如下:

-ProjectA
-ProjectC
-Project1
-Project2

所有项目都处于同一水平。

所以在我的项目A的settings.gradle中我有:

include ':Project1',':Project1:ProjectC',[...]
project(':Project1') = new File('../Project1')
project(':Project2') = new File('../Project2')
project(':Project1:ProjectC') = new File('../ProjectC')
project(':Project2:ProjectC') = new File('../ProjectC')

在build.gradle中我做了:

dependencies{ compile project('Project1'),project('Project2')

问题是它未正确添加到类路径中。我认为,因为Project1和Project2都依赖于ProjectC,所以它会以某种方式被覆盖。有什么想法吗?

感谢。

修改

以下是依赖关系树:

Root project 'ProjectA'
+--- Project ':ProjectB'
|    \--- Project ':ProjectB:Project1'
|         +--- Project ':ProjectB:Project1:Project2'
|         \--- Project ':ProjectB:Project1:Project3'
\--- Project ':ProjectC'
     \--- Project ':ProjectC:Project1'
          +--- Project ':ProjectC:Project1:Project2'
          \--- Project ':ProjectC:Project1:Project3'

2 个答案:

答案 0 :(得分:1)

对于如下所示的工作区:

rootFolder
|
|- build.gradle 
|- settings.gradle 
|
|- ProjectA
|  |-build.gradle
|
|- Project1
|  |-build.gradle
|
|- Project2
|  |-build.gradle
|
|- ProjectC
   |-build.gradle

您的settings.gradle应如下所示(无论子项目的依赖关系如何):

include ':ProjectA',':Project1',':Project2',':ProjectC',

您只是告诉根项目有4个子项目及其所在位置。那就是它。

现在,在每个子项目的build.gradle文件中处理依赖关系。对于看起来像这样的依赖关系:

ProjectA
|-Project1
|  |-ProjectC
|
|-Project2
   |-ProjectC  

ProjectA' build.gradle:

dependencies{
    compile project(':Project1')
    compile project(':Project2')
}

Project1' build.gradle:

dependencies{
    compile project(':ProjectC')
}

Project2' build.gradle:

dependencies{
    compile project(':ProjectC')
}

答案 1 :(得分:0)

我最终做的是在类路径中更改错误的路径:

的build.gradle

 eclipse{
    classpath{
        file{
             whenMerged { classpath ->

                classpath.entries.find { entry -> 
                    entry.kind == 'src' && entry.path.contains('ProjectC')
                }.each{ entry ->
                    entry.path=file("/ProjectC")
                }



            }
        }
    }
 }

它工作正常。我仍然不知道为什么gradle没有正确地使用类路径...