我是相当新的摇篮。
我想看看是否有可能从同一项目源构建多个罐子。 我浏览以前类似的问题,但我的情况有点不同。 我想两次编译所有的源文件产生两种不同的罐子,每个不同的依赖关系,以及不同的工件标识符。 从概念上讲它可以被表示为如下:
- 项目“FooBase”
- 的src / main / JAVA / ...
- 取决于库酒吧1.0.0版
- 编译所有源,并产生“org.foo/Foo1”(组/伪像)
- 项目“foo2的”
- 没有自己的来源,或可添加源
- 取决于库酒吧版本2.0.0
- 在编译“FooBase”和它的源中的所有源极,并产生“org.foo/Foo2”(组/伪像)
这算哪门子的构建与可能的gradle? 什么是最好的办法? 谢谢!
实现你想要什么,清洁的方法是创建一个多项目构建,有两个子项目(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.class
和Foo2.class
- 上传
foobase-1.0.pom
包含依赖于log4j-1.2.13
- 上传
foo2-1.0.pom
包含依赖于log4j-1.2.16