【发布时间】:2018-07-30 23:25:06
【问题描述】:
我有一个 gradle 多项目,并想创建一个包含我的子项目的所有类和外部依赖项的单个 jar(库)。
我有以下项目结构。每个项目都有自己的第 3 方依赖项。公共依赖项包含在根项目中。两个模块 A 和 B 都依赖于内核。
+ root-project (only build.gradle and settings.gradle)
- core (src/main/java, src/main/resources, ..)
- module-A (src/main/java, src/main/resources, ..)
- module-B (src/main/java, src/main/resources, ..)
为了导出单个 jar,我在根项目的 build.gradle 中添加了以下任务:
apply plugin: "java"
subprojects.each { subproject -> evaluationDependsOn(subproject.path)}
task allJar(type: Jar, dependsOn: subprojects.jar) {
baseName = 'multiproject-test'
subprojects.each { subproject ->
from subproject.configurations.archives.allArtifacts.files.collect {
zipTree(it)
}
}
}
artifacts {
archives allJar
}
此方法有效,但仅收集项目源文件。忽略第 3 方依赖项。所以我尝试了 Shadow Plugin (http://imperceptiblethoughts.com/shadow/),它也应该包含外部依赖项。
不幸的是,插件根本没有收集任何东西。这很可能是由于缺少根项目与其子项目之间的依赖关系。我如何告诉影子插件,它应该收集子项目的来源?或者有没有更好的方法从多个项目中导出单个库?
使用影子插件完成 build.gradle:
/****************************************
* instructions for all projects
****************************************/
allprojects {
apply plugin: 'idea'
apply plugin: 'eclipse'
group = 'com.test.multi-project'
version = '1.0'
}
/****************************************
* instructions for each sub project
****************************************/
subprojects {
apply plugin: "java"
sourceCompatibility = 1.9
targetCompatibility = 1.9
repositories {
mavenCentral()
}
dependencies {
compile "org.slf4j:slf4j-api:1+"
compile "ch.qos.logback:logback-core:1+"
compile "ch.qos.logback:logback-classic:1+"
testCompile "junit:junit:4+"
}
}
/****************************************
* Single jar out of all sub projects
****************************************/
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.2'
}
}
apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'java'
shadowJar {
baseName = 'multiproject-test'
}
子模块包含在根项目的settings.gradle中
rootProject.name = 'myproject-root'
// submodules
include ":core"
include ":module-A"
include ":module-B"
感谢您的帮助!
【问题讨论】: