我需要调查 Maven 和 Gradle 是否提供相同的灵活性来为每个项目为多个源文件夹生成多个 jar 文件。
我知道这通常是不推荐的,但是当涉及到这个要求时,我需要比较两个构建工具的功能/灵活性(多模块 maven 项目结构目前不是一个选项)。
摇篮
在 gradle 中,这非常简单:
sourceSets {
main {
java {
srcDir 'src'
}
}
other {
java {
srcDir 'other'
}
}
}
task otherJar(type: Jar) {
from sourceSets.other.output
classifier = 'other'
customName = 'other.jar'
}
使用 gradle 构建它时,类文件的组织方式如下:
build
> classes
> main
> com
> other
> com
这非常好,因为它可以“回溯”相应类的源文件夹。因此,每个 sourceSet 可能具有相同的包名称,并且仍然可以获得具有正确类的单独 jar 文件。
马文
在 Maven 中,这似乎是不可能的。即使可以使用build-helper-maven-plugin(用于指定多个源文件夹)和maven-jar-plugin(用于构建多个 jar 文件)的组合,也只能在包级别拆分源,请参阅排除,包括在maven-jar-plugin中。
据我了解,这是因为编译的类没有根据它们在 maven 中的原始源文件夹组织在target/classes文件夹中。
因此,如果需要:
- 一个项目有多个源文件夹,源文件夹之间可能有同名的包。
- 为每个源文件夹生成一个 jarfile。
需要使用 gradle(或任何其他提供这种灵活性的构建工具)。还是我错过了 Maven 中提供相同灵活性的一些秘密后门?