如何在Maven中定义一组命名的相关依赖项?

时间:2012-10-22 19:56:39

标签: maven maven-3

我有几个独立项目(他们没有相同的父项),但他们使用相同的库集。例如

  • 项目A
  • 项目B
  • 项目C

所有这些项目都使用Spring,Postgres,Hibrenate和tomcat。我想要做的是沿着以下几行介绍一个命名的dependecies集合的概念:

  • TSHP 1.0 - 可能包含tomcat 6.0.35,Spring 3.0.7,Hibernate 3.6.8 ......等等。
  • TSHP 2.0 - 可能包含tomcat 7.0.32,Spring 3.1.2,Hibernate 4.1.7等。

我希望能够说项目A依赖于TSHP 1.0,项目B依赖于TSHP 2.0 ...等我在这种设置中看到的值是

  • 很容易对作为公司集团使用的一组公共库进行标准化,因此跨项目审计很容易,如果你知道的话,你不必深入研究项目的pom它正在使用一组命名的依赖项
  • 使用标准类路径启动新项目非常简单,因为应该可以只对命名组包含一个依赖项并获取该类型应用程序所需的所有内容,只需要一个人找出并验证在命名类路径中的jar组合真的很好地相互配合。

这种类型的设置可以用maven3完成吗?如果是这样如何?

更新:我在父pom设置中看到的问题是POM只能有一个父级,但我可能有几个标准的命名类路径,例如:

  • WEB_SECURITY - 可能是用于防范常见Web安全问题的jar集合,因此Web应用程序可能包含TSHP + WEB_SECURITY,而批处理应用程序可能只包含TSHP。组合比继承更好,更灵活。

2 个答案:

答案 0 :(得分:2)

为“平台”创建一个新项目,即您想要一起使用的依赖项组。其包装类型应为:pom

<project>
    <groupId>…</groupId>
    <artifactId>tshp-platform</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>
    <dependencies>
      <!-- Dependencies for TSHP 1.0 -->
    </dependencies>
…

发布1.0的pom。然后更新TSHP 2.0的版本和依赖项。然后释放它。

现在你的项目可以简单地声明对pom项目的依赖,并且会过渡地获取平台。

但请注意,明确声明每个项目直接依赖的工件通常被认为是一种好习惯。但是,这不是必需的。

答案 1 :(得分:1)

我认为你所说的是“公司POM”的概念 definition given by Sonatype是:

Corporate Pom

  

企业Pom是一个父Pom,位于公司的继承结构的顶部。这是集中管理某些配置的最佳实践,例如Enforcer规则配置,默认插件版本等。这也可称为“组织Pom”。术语“Super Pom”经常被错误地应用于Corporate Poms。

另见:

父Pom

  

父母pom只是一个pom,其他pom通过一个部分继承。从父母那里继承的Poms有时被称为“儿童”或“儿童poms”。