Intellij Idea 13.x和ASM 5.x库不兼容?

时间:2014-05-26 20:47:52

标签: java maven intellij-idea java-bytecode-asm

我无法通过Intellij Idea 13.0编译我的代码来反对ASM 5.0.3

我有一个多模块Maven项目。它成功编译和安装。

显然com.google.findbugs:findbugs依赖于asm:asm:3.3,我想使用org.ow2.asm:asm:5.0.3来操作某些字节码。

因此,在父pom.xml中,我从类路径中排除了asm:asm:3.3依赖项。当我从命令行运行mvn install时,这可以正常工作。

我无法获得 Build - >使Project 菜单选择在Intellij Idea中工作。

以下是我的pom.xml文件的相关部分。

parent.pom

<dependency>
    <groupId>org.ow2.asm</groupId>
    <artifactId>asm</artifactId>
    <version>5.0.3</version>
</dependency>

<dependency>
    <groupId>org.ow2.asm</groupId>
    <artifactId>asm-tree</artifactId>
    <version>5.0.3</version>
</dependency>

<dependency>
    <groupId>org.ow2.asm</groupId>
    <artifactId>asm-util</artifactId>
    <version>5.0.3</version>
</dependency>

<dependency>
    <groupId>org.ow2.asm</groupId>
    <artifactId>asm-commons</artifactId>
    <version>5.0.3</version>
</dependency>


<dependency>
    <groupId>com.google.code.findbugs</groupId>
    <artifactId>findbugs</artifactId>
    <version>2.0.3</version>
    <exclusions>
        <exclusion>
            <groupId>asm</groupId>
            <artifactId>asm</artifactId>
        </exclusion>
        <exclusion>
            <groupId>asm</groupId>
            <artifactId>asm-commons</artifactId>
        </exclusion>
        <exclusion>
            <groupId>asm</groupId>
            <artifactId>asm-tree</artifactId>
        </exclusion>
    </exclusions>
</dependency>

以下是失败的代码

18       public static void main(final String[] args) throws IOException 
19       { 
20           final InputStream is = NotEmptyTest.class.getResourceAsStream("/com/vertigrated/annotation/NotEmptyTest.class"); 
21           final ClassReader cr = new ClassReader(is); 
22           final ClassNode cn = new ClassNode(); 
23           cr.accept(cn, 0); 
24           for (final MethodNode mn : cn.methods)
25           { 
26 - 38 snipped for brevity 
39           } 
40       } 
41   }

以下是错误消息:

Information:Using javac 1.7.0_25 to compile java sources
Information:java: Errors occurred while compiling module 'tests'
Information:Compilation completed with 1 error and 2 warnings in 2 sec
Information:1 error
Information:2 warnings
/<path to my source code>/NotEmptyTest.java
    Error:Error:line (24)java: incompatible types
  required: org.objectweb.asm.tree.MethodNode
  found:    java.lang.Object
    Warning:Warning:java: /<path to my project>//NotEmptyTest.java uses unchecked or unsafe operations.
    Warning:Warning:java: Recompile with -Xlint:unchecked for details.

正如您在屏幕截图中看到的那样,它会在Javadoc中报告库的正确版本,但自动完成功能会显示旧的3.3非类型安全返回值List而不是{{1 }}

JavaDoc PopUp http://www.vertigrated.com/images/Voila_Capture%202014-05-26_04-38-45_PM.png

以下是Maven所知道的,这是正确的:

List<MethodNode>

如何让Intellij Idea在内部使用正确的依赖?

1 个答案:

答案 0 :(得分:0)

看起来你最终在IntelliJ IDEA的编译类路径中有asm-5.0.3.jar。 这个JAR通过剥离可剥离的每一部分来优化最小尺寸,包括通用签名(List<MethodNode>如何成为List,这实际上是{{1}在你的情况下)。

要确保是这种情况,请尝试通过asm-debug-all替换List<Object>asm等上的依赖项。你得到的JAR会更大,但项目现在应该编译。

下一个问题是如何在asm-tree中编译,但在IntelliJ IDEA中失败。您可以在&#34;项目结构&#34;中看到类路径。 &#34;模块&#34;上的对话框,&#34;依赖关系&#34;标签。也许在IntelliJ中没有正确导入类路径(在这种情况下,向IntelliJ IDEA issue tracker报告,您很可能很快得到一些帮助。)