2013-03-21 46 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

相关问题