【问题标题】:Exclude transitive dependency maven排除传递依赖maven
【发布时间】:2021-10-24 16:32:22
【问题描述】:

我有一个项目需要使用第 3 方库 X。X 内部依赖于 Y,但我的项目中不需要 Y,因为它会导致一些问题。

如何将 Y 从我的项目中排除,但仍让 X 在内部使用它。

pomX.xml

    <dependency>
      <groupId>Y</groupId>
      <artifactId>Y</artifactId>
      <version>Y.version</version> 
    </dependency>

projectPom.xml

   <dependency>
      <groupId>X</groupId>
      <artifactId>X</artifactId>
      <version>X.version</version> 
   </dependency>

我尝试的是这个-

ProjectPom.xml

 <dependency>
      <groupId>X</groupId>
      <artifactId>X</artifactId>
      <version>X.version</version> 
     <exclusions>
          <exclusion>
              <groupId>Y</groupId>
              <artifactId>Y</artifactId>
          </exclusion>
     </exclusions>
 </dependency>

但这会导致 Y 在构建期间也不能用于 X。如何从我的项目中排除 Y,但仍然让 X 在内部使用它?

【问题讨论】:

  • 而不是 X 和 Y,精确涉及的问题和/或库会更有用吗?例如“但仍然在内部让 X 使用它”是什么意思?
  • Y but I don't need Y in my project since it causes some issues. 听起来像一个真正的问题?你用 Y 吗?

标签: java maven maven-plugin dependency-management


【解决方案1】:

抱歉,这是不可能的。

Maven 获取依赖项并构造类路径。

如果 Y 在类路径上,则它可用于类路径的所有其他元素,无论它最初来自何处。

您可以区分“我在编译时需要它,而不是在运行时”,反之亦然,但您不能将依赖项 Y 限制为 X 的使用。

【讨论】:

    【解决方案2】:

    将其作为传递依赖项 (exclusion) 排除,同时使用 provided 将其添加为您自己的依赖项。

    <dependencies>
        <dependency>
            <groupId>X</groupId>
            <artifactId>X</artifactId>
            <version>X.version</version> 
            <exclusions>
                <exclusion>
                    <groupId>Y</groupId>
                    <artifactId>Y</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>Y</groupId>
            <artifactId>Y</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    

    这样X 将成为您构建结果的一部分(即在构建war-文件时),但Y 不会。 Y 在编译时仍然可用。

    【讨论】:

    • 我不明白排除在这里应该有什么帮助。
    猜你喜欢
    • 2018-07-06
    • 1970-01-01
    • 2019-10-29
    • 2016-04-20
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多