2013-03-21 76 views
4

我對gradle相當陌生。從單個項目源創建多個罐子

我想知道是否可以從同一個項目源創建多個jar。我瀏覽過以前的類似問題,但是我的情況有點不同。我想編譯所有的源文件兩次,以產生兩個不同的罐子,每個都有不同的依賴關係,以及不同的工件ID。

  • 項目 「FooBase」
    • 的src/main/JAVA/...
    • 取決於庫酒吧版本1.0.0
    • 編譯所有源和生產:概念如下它可以表示「org.foo/Foo1」(組/神器)
  • 項目 「foo2的」
    • 沒有自己的來源,或可廣告d源
    • 取決於庫欄版本2.0.0
    • 編譯所有源在 「FooBase」 和它的來源,併產生 「org.foo/Foo2」(組/僞像)

這種構建可以用gradle實現嗎?最好的方法是什麼?謝謝!

回答

5

實現你想要的是建立一個多項目構建,有兩個子項目(foobase & foo2的),其中源集foo2的配置爲含有除自身的源套foobase的一個乾淨的方式源。

爲了獲得工件的不同依賴關係,您只需在子項目中聲明dependencies部分。

爲了測試這個,我在每個子項目中創建了一個具有一個java文件的多項目構建。爲了簡化此處的輸出,根build.gradle文件包含所有內容,包括子項目特定的自定義項。然而,在「現實生活」中,我始終將子項目特定的配置置於build.gradle文件中正確的子項目級別。

的gradle這個build文件包含

  • 添加源組從foobase到
  • 部署foo2的
  • 不同依賴於兩個項目,一個本地的倉庫(驗證POM的正確創建)
  • 用於IntelliJ IDEA和Eclipse的可選IDE插件

總而言之,I en DED了以下內容:

項目結構

build.gradle      => root project build file 
settings.gradle     => specification of included subprojects 
foo2\        => foo2 subproject folder 
    src\ 
    main\ 
     java\ 
     Foo2.java     => Empty class 
foobase\       => foobase subproject folder 
    src\ 
    main\ 
     java\ 
     FooBase.java    => Empty class 

設置。gradle這個

include ':foobase', ':foo2' 

的build.gradle

allprojects { 
    apply plugin: 'idea' 
    apply plugin: 'eclipse' 
    group = 'org.foo' 
    version = '1.0' 
} 

subprojects { 
    apply plugin: 'java' 
    apply plugin: 'maven' 

    repositories { 
     mavenCentral() 
    } 

    uploadArchives { 
     it.repositories.mavenDeployer { 
      repository(url: "file:///tmp/maven-repo/") 
     } 
    } 
} 

project(':foobase') { 
    dependencies { 
     compile 'log4j:log4j:1.2.13' 
    } 
} 

project(':foo2') { 
    dependencies { 
     compile 'log4j:log4j:1.2.16' 
    } 

    sourceSets.main.java.srcDirs  project(':foobase').sourceSets.main.java 
    sourceSets.main.resources.srcDirs project(':foobase').sourceSets.main.resources 
    sourceSets.test.java.srcDirs  project(':foobase').sourceSets.test.java 
    sourceSets.test.resources.srcDirs project(':foobase').sourceSets.test.resources 
} 

請注意,我增加了對資源和測試的源目錄爲好。如果不需要,可以省略最後三行。

要驗證編譯:

  • 確保兩個jar文件包含所有想要的類。
  • 驗證兩個已部署的maven pom是否具有正確的依賴關係。

在我的情況:

  • foobase-1.0.jar只包含FooBase.class
  • foo2-1.0.jar同時包含FooBase.classFoo2.class
  • 上傳foobase-1.0.pom包含依賴於log4j-1.2.13
  • 上傳foo2-1.0.pom包含依賴關係log4j-1.2.16
+0

謝謝!我會給它一個鏡頭。 – sjlee 2013-03-27 06:11:42

相關問題