从单个项目源构建多个罐子(build multiple jars from a single pro

2019-07-22 12:09发布

我是相当新的摇篮。

我想看看是否有可能从同一项目源构建多个罐子。 我浏览以前类似的问题,但我的情况有点不同。 我想两次编译所有的源文件产生两种不同的罐子,每个不同的依赖关系,以及不同的工件标识符。 从概念上讲它可以被表示为如下:

  • 项目“FooBase”
    • 的src / main / JAVA / ...
    • 取决于库酒吧1.0.0版
    • 编译所有源,并产生“org.foo/Foo1”(组/伪像)
  • 项目“foo2的”
    • 没有自己的来源,或可添加源
    • 取决于库酒吧版本2.0.0
    • 在编译“FooBase”和它的源中的所有源极,并产生“org.foo/Foo2”(组/伪像)

这算哪门子的构建与可能的gradle? 什么是最好的办法? 谢谢!

Answer 1:

实现你想要什么,清洁的方法是创建一个多项目构建,有两个子项目(foobase&foo2的),其中源集foo2的配置为含有除自身的源源集foobase的。

为了得到不同的相关的文物,你只需要声明dependencies于子项目不同部分。

为了验证这一点,我创建了一个多项目建设,在每个子项目一个Java文件。 为了简化这里输出,根build.gradle文件中包含的一切,包括子项目特定的自定义。 在“现实生活”不过,我始终把子项目具体配置的build.gradle文件在正确的子项目水平。

该gradle这个build文件包含

  • 从foobase添加源台,以foo2的
  • 不同的依赖性在这两个项目
  • 部署到本地仓库(验证POM的正确创建)
  • 可选的IDE插件的IntelliJ IDEA和Eclipse

总而言之,我结束了以下内容:

项目结构

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

settings.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


文章来源: build multiple jars from a single project source
标签: gradle