Maven 2 使用Maven,如何将多个模块组装成一个工件?

Maven 2 使用Maven,如何将多个模块组装成一个工件?,maven-2,Maven 2,我们有一个母船项目,包括几个模块: foo + foo-core + foo-resource + foo-util + foo-whatever 我希望允许开发人员将核心、资源和util模块作为依赖项包括在内(不包括-whatever模块)。我知道我可以指定它们包含每个依赖项,但是允许它们只指定以下内容会更好 <artifactId>foo-sdk</artifactId> 但它看起来并不是它的预期用途。这难道不是另一个子模块foosdk,它打包了pom和对foo-

我们有一个母船项目,包括几个模块:

foo
+ foo-core
+ foo-resource
+ foo-util
+ foo-whatever
我希望允许开发人员将核心、资源和util模块作为依赖项包括在内(不包括-whatever模块)。我知道我可以指定它们包含每个依赖项,但是允许它们只指定以下内容会更好

<artifactId>foo-sdk</artifactId>

但它看起来并不是它的预期用途。

这难道不是另一个子模块foosdk,它打包了pom和对foo-{core,resource,util}的依赖关系吗?

您可以在项目中使用
pom
类型的打包对依赖关系进行分组。从Maven的书中:

3.6.1. 分组依赖项 如果您有一组依赖项 它们在逻辑上分组在一起。 可以使用pom创建项目 对依赖项进行分组的打包 在一起例如,让我们假设 您的应用程序使用Hibernate, 一种流行的对象关系映射 框架每一个使用 Hibernate也可能有依赖关系 Spring框架与MySQL JDBC驱动程序。而不是必须 将这些依赖项包含在每个 使用Hibernate、Spring、, 你可以创建一个特殊的 POM只不过是 声明一组公共依赖项。 您可以创建一个名为
持久性deps
(缩写为 持久性依赖项),并且具有 需要做的每一个项目 持久性依赖于这种便利性 项目:

示例3.11。在单个POM项目中整合依赖关系

<project>
  <groupId>org.sonatype.mavenbook</groupId>
  <artifactId>persistence-deps</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>
  <dependencies>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate</artifactId>
      <version>${hibernateVersion}</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-annotations</artifactId>
      <version>${hibernateAnnotationsVersion}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-hibernate3</artifactId>
      <version>${springVersion}</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${mysqlVersion}</version>
    </dependency>
  </dependencies>
  <properties>
    <mysqlVersion>(5.1,)</mysqlVersion>
    <springVersion>(2.0.6,)</springVersion>
    <hibernateVersion>3.2.5.ga</hibernateVersion>
    <hibernateAnnotationsVersion>3.3.0.ga</hibernateAnnotationsVersion>
  </properties>
</project>
如果您以后决定切换到 不同的JDBC驱动程序(例如, JTDS),只需替换依赖项即可 在要使用的持久性deps项目中 jtds:jtds而不是 mysql:mysql java连接器和更新 版本号。所有项目 根据持久性,DEP将使用 JTD,如果他们决定更新到 更新版本。合并相关 依赖关系是减少依赖的好方法 关于pom.xml文件的长度 开始不得不依赖一个大公司 依赖项的数量。如果你需要 共享大量依赖项 在项目之间,您还可以 建立亲子关系 在项目和重构之间 对父级的公共依赖关系 项目,但其缺点是 亲子方法是一种 项目只能有一个父项。 有时,分组更有意义 将相似的依赖项放在一起 引用pom依赖项。这边 您的项目可以引用任意多个 这些合并的依赖项POM如下所示: 它需要。注

Maven使用依赖项的深度 在树中解决冲突时 使用最接近的wins方法。使用 依赖项分组技术 上面将这些依赖关系推到一个 在树上放平。把这个放在里面 在分组和分组之间进行选择时请注意 pom或使用
dependencyManagement
在父POM中


“您可以使用pom类型的打包对项目中的依赖项进行分组”非常好,谢谢。
<project>
  <description>This is a project requiring JDBC</description>
  ...
  <dependencies>
    ...
    <dependency>
      <groupId>org.sonatype.mavenbook</groupId>
      <artifactId>persistence-deps</artifactId>
      <version>1.0</version>
      <type>pom</type>
    </dependency>
  </dependencies>
</project>