2011-08-18 115 views
7

我正在爲此撕掉我的頭髮。我已經將我的腳本剝離回Gradle教程頁面提供的代碼,因爲我認爲我要麼做根本錯誤的事情,要麼誤解了一個多項目應用程序應該如何使用gradle進行結構化。使用Gradle構建多java項目

我在eclipse中有三個java項目,所有這三個腳本都包含一個build.gradle腳本,並且只包含一個settings.gradle腳本。結構如下:

Scripts 
-- build.gradle 
-- settings.gradle 
Database 
-- build.gradle 
Services 
-- build.gradle 

我試圖建立「數據庫」,並使用在「腳本」項目的生成腳本「服務」項目。要創建項目樹,我在settings.gradle以下代碼:

include 'Services', 'Database' 

project (':Services').projectDir = new File(settingsDir, "../Services") 
project (':Database').projectDir = new File(settingsDir, "../Database") 

複製在多項目教程中的代碼(gradle這個文檔),我試圖讓每一個構建腳本打印的出一些文字,以確保一切正確設置。我的最終目標是在執行'eclipseClasspath'時正確構建依賴關係,以便所有項目在eclipse中正確編譯。但是,文本沒有按照我的預期打印出來!

下面是什麼是包含三個構建腳本中:

腳本的build.gradle

allprojects { 
    task hello << { task -> println "I'm $task.project.name" } 
} 

subprojects { 
    hello << {println "- I depend on Scripts"} 
} 

數據庫的build.gradle

hello.doLast { 
    println "- I'm inside database" 
} 

服務的build.gradle

hello.doLast { 
    println "- I'm inside services" 
} 

在該「腳本」項目,當我運行「gradle這個-q你好」,我得到如下結果:

I'm Scripts 
I'm AnprDatabase 
- I depend on Scripts 
I'm Database 
- I depend on Scripts 

爲什麼文本「 - 我在裏面的數據庫」和「 - 我在裏面服務'沒有出現?我有點困惑。我只能猜測它與我的項目結構有關。有人可以證實這種情況嗎?如果不是,問題是什麼?如前所述,我已將我的腳本剝離回這個簡單示例,因爲我無法使用相同的結構在每個項目構建腳本中運行依賴項。

非常感謝您提供的任何幫助。

+0

對我來說很好,'gradle-1.0-milestone-3' – axtavt

+0

我使用相同版本的gradle。您的應用程序是否包含與我的結構相同的Java項目? – ScreamingMage

+0

對於你的另一個問題,你的構建腳本是從你的等效'腳本'項目中運行還是在三個項目的根源?我想嘗試在'腳本'項目中運行我的腳本 – ScreamingMage

回答

4

我設法弄清楚它爲什麼不起作用。這是我的一個愚蠢的錯誤。 「數據庫」和「服務」項目與我的'腳本'項目不在同一個目錄中。我已經將這些項目檢查到一個git倉庫,它將本地目錄從我的Eclipse工作區複製到本地git倉庫。我沒有將'Scripts'項目檢入到我的git倉庫中,所以它仍然駐留在我的Eclipse工作區中。現在似乎很明顯,爲什麼它不工作!檢查我的「腳本」項目並更改settings.gradle中的其他項目的路徑已修復此問題。

有意思的是,如果找不到定義的項目,Gradle將創建一個空項目,而不是拋出FileNotFoundException或類似的東西。這是我沒有讚賞的東西。起初我認爲這是一種奇怪的行爲,但我認爲它讓用戶有能力在腳本運行時即時創建他的項目。不知道如果我喜歡這個,但!

因此,在包含項目時,請務必確保在設置中導航到正確的目錄!否則,你可能會像我一樣犯規。