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

时间:2010-09-13 20:45:01

标签: maven-2

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

foo
+ foo-core
+ foo-resource
+ foo-util
+ foo-whatever

我想允许开发人员将核心,资源和util模块作为依赖项包含在内(不包括-whatever模块)。我知道我可以指定它们包含每个依赖项,但允许它们只指定类似

的内容会很好
<artifactId>foo-sdk</artifactId>

获得开发foo所需的一切。这具有额外的优势,它使我们能够添加(或删除)进入sdk的内容。

如果foo-sdk不仅仅是一个装有其他罐子的罐子,那将是最好的。我宁愿它只是指向其他工件的pom。

我觉得我以前见过这个,但找不到指令。我检查了Maven Assembly Plugin但看起来这不是它的预期用途。

2 个答案:

答案 0 :(得分:1)

您可以使用类型为pom的打包对项目中的依赖项进行分组。来自Maven的书:

  

3.6.1。分组依赖

     

如果您有一组依赖项   它们在逻辑上组合在一起。   您可以使用pom创建项目   打包依赖关系的打包   一起。例如,让我们假设   您的应用程序使用Hibernate,   一种流行的对象关系映射   框架。每个使用的项目   Hibernate也可能有依赖   在Spring Framework和MySQL上   JDBC驱动程序。而不是必须   在每个中包含这些依赖项   使用Hibernate,Spring的项目,   和MySQL你可以创建一个特殊的   POM只做了什么   声明一组公共依赖项。   您可以创建一个名为的项目   persistence-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>
     

如果您在a中创建此项目   目录名为persistence-deps,all   你需要做的就是创造这个   pom.xml并运行mvn install。以来   包装类型为pom,此POM   安装在本地存储库中。   您现在可以将此项目添加为   依赖关系及其所有​​依赖关系   将被添加为传递   对项目的依赖。当你   声明对此的依赖   persistence-deps项目,不要   忘记指定依赖类型   为pom

     

示例3.12。声明对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>
     

如果您以后决定切换到   不同的JDBC驱动程序(例如,   JTDS),只需替换依赖项   在persistence-deps项目中使用   net.sourceforge.jtds:jtds而不是   mysql:mysql-java-connector和update   版本号。所有项目   取决于持久性 - deps将使用   JTDS如果他们决定更新到   较新的版本。合并相关   依赖是一种减少的好方法   关于pom.xml文件的长度   开始不得不依靠一个大的   依赖数量。如果你需要   共享大量依赖项   在项目之间,你也可以   建立亲子关系   项目和重构之间的所有   与父级的共同依赖关系   项目,但缺点   亲子方法是一个   项目只能有一个父项。   有时候分组更有意义   类似的依赖关系和   引用pom依赖。这条路,   你的项目可以参考多少   这些统一的依赖POM为   它需要。注意

     

Maven使用依赖的深度   解决冲突时在树中   使用最近赢的方法。运用   依赖分组技术   上面推动了那些依赖关系   在树中降低水平。保持这个   在选择分组时选择   pom或使用dependencyManagement   在父母POM中

答案 1 :(得分:0)

这不是另一个子模块foo-sdk,包含pom和依赖foo- {core,resource,util}?