【问题标题】:Propagate provided dependency to dependent project将提供的依赖项传播到依赖项目
【发布时间】:2014-08-11 12:46:24
【问题描述】:

我有简单的 Maven 项目结构:

mainProject
|-- subProject1
|   |-- subSubProject
|-- subProject2

关键是我的 mainProject 包含每个子项目中使用的依赖项(这些依赖项对于每个子项目都是通用的),但我不希望它们在编译和构建时包含在我的 WAR 文件中(提供范围)。另外,我不想在每个子项目中声明依赖项,因为我已经在 mainProject 中声明了它们。

WAR 文件在其构建文件中包含所有子项目库。

谢谢

【问题讨论】:

  • 你能更详细地描述你的问题和你想要什么吗?您尝试过哪些还没有做到这一点的方法?
  • mainProject 只是一个简单的父 pom,它包含其他子项目的依赖项?你问的有点含糊。
  • 是那些 3rd 方 jar 还是您内部项目特定的 jar。 ? - 谢谢
  • 每个项目都是一个jar并且有自己的依赖。 mainProject 只是一个“普通”项目,辅助类用作所有其他子项目的依赖项。 mainProject 还包含 subProject1、subSubProject、subProject2 和所有其他 subProject(共享依赖项)中所需的依赖项。我将这些依赖项声明为 scope=provided,因为我不希望它们被放置在我的 webapp WEB-INF/lib 文件夹中(它们太多),但是其他子项目需要它们。提供的范围不允许传播依赖关系,我正在寻找绕过它的方法。
  • 管理不同类型的依赖项及其版本最简单的方法是拥有一个包含其他子项目信息的父 pom.xml,在每个子项目中指定必要的依赖项并从父母 pom。如果您需要有关如何执行此操作的更多信息,请告诉我

标签: java maven


【解决方案1】:

在我看来,这个问题可以有两种解决方案。

1.) 您可以更改编译范围,并且在构建 war 文件时,您可以使用 maven-war-plugin 排除所有您不想要的 jars。

<build>
<plugins>
  <plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
      <packagingExcludes>WEB-INF/lib/xyz.jar</packagingExcludes>
    </configuration>
  </plugin>
</plugins>

2.) 如果它们是第 3 方特定的 jar,那么您可以将它们移动到服务器 lib 目录,并且在运行时您的 Web 容器将提供所需的类。

【讨论】:

  • 1.它们太多,无法创建此排除配置。我正在考虑这个问题,但项目在不断增长,最终我会失去那些依赖关系的踪迹。 2. 那些 3rd 方 jar 存储在其他地方并由 VirtualWebappLoader 加载到容器中
  • 感谢@tech-idiot,我设法通过使用 PackagingIncludes 解决了这个问题。
【解决方案2】:

我没有太多使用 Maven 的经验,但我记得在我使用过的 pom 文件中看到了父 pom。似乎您喜欢将主项目 pom 作为父 pom 包含在内,然后在各自的 pom 中添加子项目特定的依赖项。我认为父 pom 中的 scope=provided 仍然会阻止公共依赖项最终成为 war 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-05
    • 2016-10-16
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 2010-10-30
    相关资源
    最近更新 更多