2017-05-06 111 views
0

我有一个Gradle项目,它依赖于另一个Gradle项目。我的项目结构是这样的:尝试将Gradle项目作为依赖包含,但包含()不起作用

  • PROJECT1
    • 的build.gradle
    • settings.gradle
    • 的src/
  • 项目2
    • 的build.gradle
    • settings.gradle
    • 的src/

project1/build.gradle我想补充project2作为一个依赖:

version '1.0-SNAPSHOT' 

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'idea' 

sourceCompatibility = 1.8 

repositories { 
    mavenCentral() 
} 

sourceSets { 
    main { 
     java { 
      srcDirs = [ 'src' ] 
     } 
    } 
} 

include ':project2' 
project(':project2').projectDir = new File("../project2") 

dependencies { 
    compile project(':project2') 
} 

不幸的是,我总是收到此错误信息:

Error:(21, 0) Could not find method include() for arguments [:project2] on root project 'project1' of type org.gradle.api.Project.

我正在使用Gradle 3.5,在命令行(gradle build)和IntelliJ中均出现错误。我发现了几个关于同一问题的StackOverflow线程(thisthis),但它们没有帮助。

Gradle multi-project documentation也没有提到我可能会丢失,可能会导致错误的任何具体要求。

当我离开include调用时,我收到消息,指出在根项目中找不到项目路径。

我也尝试将依赖项移动到project1的子目录,但没有成功。

我在想我在做什么错,为什么显然没有其他人有同样的问题。我会很感激提示。

注意:这不是一个Android项目。

+0

'include'应该在一个名为''settings.gradle'的单独文件中调用 - 请试试看。 – Opal

+0

谢谢!我想那是我错过的。但是,现在我收到只读属性projectDir无法设置的消息。我通过指定compile project(':..:project2')作为依赖关系并删除projectDir assigment来解决它。 –

+0

你不能用gradle做到这一点。这两个项目都必须是多项目构建的子项目(https://docs.gradle.org/current/userguide/multi_project_builds.html),或者您必须使用组合构建(https://docs.gradle。组织/电流/ userguide/composite_builds.html)。 –

回答

3

正如第一条评论指出的那样,include实际上需要进入settings.gradle而不是build.gradle。这同样适用于更改projectDir属性。

评论3给了我另一个想法。该项目可以列入settings.gradle如下:

includeBuild '../project2' 

project1/build.gradle我指定的依赖性,

dependencies { 
    compile 'group:project2:version' 
} 

我一般是这样更好,因为它是更少的代码,看起来更干净。然而,不利的一面是,递归复合构建是不可能的。所以如果project2本身也是一个复合版本,这是行不通的。

相关问题