2013-06-13 115 views
3

新手搖籃query.Consider以下項目搖籃有多個罐平坦項目在一個項目中

Project 
    | 
    -component_1 

    | 
    -component_2 

我想從每個組件源,它位於src目錄下產生一個罐的結構。請注意,這不是一個多項目場景,而是多分量場景。我如何能做到這一點的搖籃(1.6)

更新:

一個構建文件是必需的,而不是每個分量具有獨立的編譯

+0

的基本方法是通過{{project.artifact}}添加的東西,可能代表了組件命名sourcesets但我要說一個很好的答案將是很難沒有一些額外的上下文來寫。例如你爲什麼不想使用多項目?你打算用罐子做什麼,在什麼地方發佈它們?他們是相關的還是獨立的?他們是普通的Java源代碼或其他東西? – Matt

+0

謝謝 問:爲什麼不多項目?答:現有代碼,無法更改結構 問:如何處理jar?答:將它們打包成單個檔案,但可能後來獨立發佈它們 問:相關?答:其中一些是相關的。 – anergy

回答

11

你提到一些組件取決於每個其他,所以我也想知道爲什麼你不想把它作爲一個多項目構建來實現。現在,讓我們假設你的所有組件都是獨立的Gradle項目。鑑於他們產生了一個JAR文件,它似乎是一個給定的Java項目。我會爲每個項目創建一個build.gradle文件。

. 
└── your-project 
    └── component1 
    │ ├── build.gradle 
    │ └── src 
    └── component2 
     ├── build.gradle 
     └── src 

對於這些項目中的每一個,我們將應用Java插件。與此插件引入的標準約定唯一的區別在於,您的源文件位於目錄src而不是src/main/java。要配置此,你需要把你的build.gradle文件是以下內容:

apply plugin: 'java' 

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

如果您對您的任何項目的執行gradle build,搖籃將編譯您的生產和測試的源代碼,運行單元測試和組裝目錄build/libs下的JAR文件。

編輯:

您可以實現馬特解釋了他的評論這種方式或去多項目構建方法。我把下面的代碼示例放在一起給你看。在項目的根級創建兩個文件:build.gradlesettings.gradle

. 
└── your-project 
    ├── build.gradle 
    ├── settings.gradle 
    ├── component1 
    │ └── src 
    └── component2 
     └── src 

settings.gradle文件中包含有你這樣的構建的一部分項目:

include 'component1', 'component2' 

然後在您的build.gradle文件,你只需要通過將其加入一個subprojects一旦定義項目定義配置塊。這意味着它適用於您構建的所有子項目。通過這種方法,您可以定義常見行爲而無需重複代碼。

subprojects { 
    apply plugin: 'java' 

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

+1爲答案,但我寧願保留單個構建文件外部組件。 – anergy

+3

您仍然可以通過在根目錄中包含一個build.gradle來配置每個組件在'project(':component1'){}'塊中構建,也就是說將benjamin描述的build.gradle構建並粘貼到像我寫的項目塊。如果你沒有把它們描述成單獨的項目,那麼你最終會用一個源代碼集替換項目的概念,並且事情會變得更復雜,沒有明顯的好處。 – Matt