部署具有多个配置文件依赖项的maven工件

时间:2013-03-05 00:58:25

标签: maven maven-dependency-plugin maven-deploy-plugin maven-profiles

我们对Maven来说相对较新,现在面临一个问题。

我们有一个Maven项目(projectA),其JAR是其他几个项目的依赖项。一些其他项目是一些自定义Web容器,而其他项目则不是,因此在自定义Web容器的情况下提供了一些projectA的依赖项jar,但在其他项目的情况下应该是运行时范围。我们目前使用排除列表来过滤掉自定义Web容器中提供的jar。

我们想知道使用maven配置文件是否更好。我们知道如何创建具有不同依赖关系的配置文件(实际上是相同的依赖关系,不同的范围),并且在两个配置文件中,构建的projectA jar都是按位相同的。但是我们不知道的是,当我们将projectA jar工件部署/发布到maven存储库时,pom.xml应该是什么样的?对于这些Web容器项目,pom.xml不应包含提供的jar,但对于其他项目,pom.xml应包含这些jar。

我们可以在每个配置文件中为jar使用不同的名称,并使用不同的pom.xml进行部署,但由于这些jar是逐位相同的,所以它似乎不是一个完美的解决方案。所以我们认为必须有一个更好的解决方案来解决这个问题,只是我们不知道,因为我们对Maven来说比较新。感谢。

1 个答案:

答案 0 :(得分:0)

POM是POM。您似乎在谈论在引用“A”的其他项目中管理传递依赖项。你在Maven的选择相当有限:

  • 您可以使用排除项删除不需要的传递依赖项。
  • 您可以将“A”中的依赖项声明为“已提供”,但只有在A的​​目标环境中实际提供该jar时,这才真正正确。它主要用于Java EE api依赖项,例如servlet-api,它由容器提供,并且禁止包含在WAR文件中。
  • 您可以将依赖项声明为可选项,这是人们在说“提供”时通常的含义,并在需要的位置手动包含这些依赖项。

我个人选择“可选”路线,因为每个项目的工作都是拉入它需要的依赖项,如果使用“A”时某些东西是可选的,那就意味着使用“A”的东西必须明确选择他们是否会使用它的可选部分。在构建具有多个不同用例的工件时,这往往是最合适的。

要获得此区域的其他帮助,您还可以使用maven enforcer plugin禁止构建中的某些依赖项,这样您就不会意外地获得您不想要的jar。