我对 gradle 相当陌生。
我想知道是否可以从同一个项目源构建多个 jar。我浏览过以前的类似问题,但我的情况有点不同。我想将所有源文件编译两次以生成两个不同的 jar,每个都有不同的依赖项和不同的工件 ID。从概念上讲,它可以表示如下:
使用 gradle 可以进行这种构建吗?最好的方法是什么?谢谢!
最佳答案
实现您想要的一种干净的方法是创建一个多项目构建,带有两个子项目(foobase 和 foo2),其中 foo2 的源集被配置为包含 foobase 的源集以及它自己的源。
要获得工件的不同依赖项,您只需要声明 dependencies
在子项目中有不同的部分。
为了测试这一点,我创建了一个多项目构建,每个子项目中都有一个 java 文件。为了简化这里的输出,根 build.gradle
文件包含所有内容,包括子项目特定的自定义。但在“现实生活”中,我总是将子项目特定的配置放在 build.gradle
中。文件在正确的子项目级别。
gradle 构建文件包含
总而言之,我最终得到了以下结果:
项目结构
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
}
请注意,我还添加了资源和测试的源目录。如果不需要,您可以省略最后三行。
要验证构建:
就我而言:
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
的依赖关于gradle - 从单个项目源构建多个 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15559753/