2017-05-06 141 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本身也是一個複合版本,這是行不通的。

相關問題