2017-02-13 128 views
1

我意識到有很多關於Gradle設置的帖子。這就是說,我研究了很多,沒有找到我正在尋找的東西,或者我使用了不正確的術語來做到這一點。我正在使用Gradle版本3.3。Gradle依賴於另一個項目失敗的模塊

所以我有多個Gradle項目,每個項目都是單獨維護的。沒有主Gradle項目。每個項目都有自己的模塊,構建和設置文件。其結構如下:

Projects 
    A 
    a1 
     build.gradle 
    a2 
     build.gradle 
    build.gradle 
    settings.gradle 
    B 
    b1 
     build.gradle 
    b2 
     build.gradle 
    build.gradle 
    settings.gradle 

我試圖做的是讓B依賴於A的模塊。我們假設B中的一個模塊依賴於a1。在B的設置,我已經做了以下內容:

rootProject.name = 'B' 
rootProject.setProjectDir(new File(".") 

include 'a1' 
project(':a1').setProjectDir(new File(settingsDir.getParentFile(), "/A/a1")) 

我存儲的版本號的方式是通過在內線封蓋每個項目的文件的build.gradle。然後我通過這個項目訪問它們。下面是B的build文件的外觀:

ext { 
    freemarkerVersion = '2.3.19' 
} 

dependencies { 
    compile project(':a1') 
    compile group: 'org.freemarker', name: 'freemarker', version: rootProject.properties.get('freemarkerVersion') 
} 

我所看到的是B能夠解決其依賴關係,並試圖編譯項目A1,但它是使用B的版本號,而不是的。我通過在具有不同版本號的兩個項目中添加通用依賴項來驗證這一點。使用B的版本顯示依賴關係。我也在B中更改了版本號,並進一步證實了這一點。因此,如果我可以在他們自己的build.gradle文件中獲得任何與項目相關的版本的幫助,那就太棒了!

編輯:更新後,找出以前的問題是從相對路徑不解決。

回答

0

不要嘟my我自己的號角或任何東西,但我發佈了我提出的解決方案,因爲我沒有其他答案敲我的門。

我做的第一件事是將我的所有版本屬性移動到外部gradle.properties文件中,而不是在項目的build.gradle文件中的ext閉包中。這樣做時,項目會在從其自己的上下文編譯時默認加載屬性文件。它當然會被user.home gradle.properties文件覆蓋,所以記住這一點。例如gradle.properties:

a_freemarkerVersion = 2.3.19 

當使用來自另一個項目一個項目的模塊,你需要一種方法來分別把兩者聯繫起來,從而可以搖籃解決依賴的屬性。我通過定義加載所需項目的屬性文件的方法來實現此目的。這種方法看起來像這樣:

def addConfig(String parent, String filename) { 
    Properties props = new Properties() 
    props.load(new FileInputStream(new File(project.projectDir.getParent(), "/${parent}/${filename}"))) 
    props.each { prop -> 
     project.ext.set(prop.key, prop.value) 
    } 
} 

addConfig("A", "gradle.properties") 

所有這些方法確實是上升一個目錄,進入指定的項目,並檢索其gradle.properties文件並加載這些變量到當前項目的屬性。說到這裏,有一點需要注意:如果你在兩者中定義了相同的變量,其中一個將被覆蓋。爲了避免這種情況,我只是用項目名稱和下劃線前綴所有變量。這將保證他們永遠不會相互衝突。

我訪問的變量與此語法所有項目:

dependencies { 
    compile group: 'org.freemarker', name: 'freemarker', version: "${a_freemarkerVersion}" 
} 

設置的其餘部分是我在戰後初期定義的相同。只要確保包含依賴模塊,指定其項目目錄,並從項目的依賴關係中編譯該項目。

相關問題