0

我需要调查 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文件夹中。

因此,如果需要:

  1. 一个项目有多个源文件夹,源文件夹之间可能有同名的包。
  2. 为每个源文件夹生成一个 jarfile。

需要使用 gradle(或任何其他提供这种灵活性的构建工具)。还是我错过了 Maven 中提供相同灵活性的一些秘密后门?

4

0 回答 0