0

我们对 Maven 比较陌生,现在面临一个问题。

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

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

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

4

1 回答 1

0

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

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

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

要在这方面获得更多帮助,您还可以使用maven enforcer 插件来禁止构建中的某些依赖项,这样您就不会意外获得您不想要的 jar。

于 2013-03-05T01:20:25.827 回答