Maven在存储库中保留了旧版本的asm

时间:2013-09-20 14:54:35

标签: java maven

最初,我在项目的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功能。

对此事的任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:5)

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进一步解释了这一点。

答案 1 :(得分:0)

更新pom.xml后提供以下命令

mvn clean