【问题标题】:Maven retains older version of asm in repositoryMaven 在存储库中保留旧版本的 asm
【发布时间】:2013-09-20 14:54:34
【问题描述】:

最初,我在项目的 pom.xml 文件中具有 asm 版本 3.2 的 maven 依赖项。我使用以下依赖项将其更新到 4.1 版

    <dependency>
        <groupId>org.ow2.asm</groupId>
        <artifactId>asm</artifactId>
        <version>4.1</version>
        <scope>compile</scope>
    </dependency>

但现在我的项目在 WEB-INF/lib 中有两个 jar 文件 - asm 3.2 和 asm 4.1。我需要 asm 4.1 的一些功能,但由于两个 jar 都可用,因此使用了 asm 3.2 代码,因此我无法使用 asm 4.1 功能。

感谢您对此事的任何帮助。

【问题讨论】:

    标签: java maven


    【解决方案1】:

    asm 3.2 的依赖是:

    <dependency>
      <groupId>asm</groupId>
      <artifactId>asm</artifactId>
      <version>3.2</version>
    </dependency>
    

    请注意组 ID 不匹配。可能发生的情况是您的另一个依赖项正在加载 asm 3.2 作为传递依赖项。由于组ID不同,Maven的依赖解析过程无法确定4.1版本应该覆盖3.2版本,出现问题。

    您需要做的是消除 3.2 版本。首先通过运行mvn dependency:tree 或使用Eclipse POM 编辑器的依赖层次选项卡来找出导致Maven 将其拉入的依赖关系。然后在您的 POM 中找到该依赖项并添加排除项:

    <dependency>
      <groupId>some.group.id</groupId>
      <artifactId>dependency-pulling-in-asm</artifactId>
      <version>1.0</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>
          <groupId>asm</groupId>
          <artifactId>asm</artifactId>
        </exclusion>
      </exclusions> 
    </dependency>
    

    Maven documentation 进一步解释了这一点。

    【讨论】:

      【解决方案2】:

      更新 pom.xml 后给出以下命令

      mvn clean 
      

      【讨论】:

      • 这里有 2 个版本的 asm 之间的 groupId 冲突。 mvn clean 不会解决它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 2011-03-06
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多