0

我们对Maven比较新,现在面临一个问题。部署具有多个配置文件依赖项的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,但由于这些罐子是相同的逐位,它似乎并不像一个完美的解决方案。所以我们认为这个问题应该有更好的解决方案,只是我们不知道,因为我们对Maven来说是比较新的。谢谢。

回答

0

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

  • 您可以使用排除来移除不需要的传递依赖关系。
  • 您可以按照“规定”中的“A”声明依赖,但如果罐子其实是A的目标环境中提供这仅仅是真正正确的。它主要用于Java EE api依赖项,如servlet-api,它们由容器提供并禁止包含在WAR文件中。
  • 你可以声明依赖作为可选的,这就是人们通常是指当他们说“提供”,并手动包括在需要它们的地方的地方这些依赖。

我个人会选择“可选”路由,因为它是每个项目的工作,以拉入它所需的依赖关系,并且如果使用“A”时可选项是可选的,则它意味着使用“A “必须明确地选择他们是否会使用它的可选部分。当构建具有多个不同用例的工件时,这往往是最合适的。

有关此方面的其他帮助,您还可以使用maven enforcer plugin来禁止构建某些依赖关系,以免意外得到不需要的罐子。

相关问题