【问题标题】:Sonar failed with an API incompatibility for Absent Code attribute声纳因缺少代码属性的 API 不兼容而失败
【发布时间】:2017-09-17 16:47:47
【问题描述】:

前几天我的一位开发人员创建了一个新应用程序,但现在我无法获得良好的 Sonar 编译。对于这种缺失代码错误,我已经尝试了许多记录在案的解决方法/解决方案,但没有找到正确的组合。该项目包括 glassfish 和 glassfish-embedded-all jar,它们应该为 javax-servlet 提供实现。它们被设置为范围测试。

<dependency>
    <groupId>org.glassfish.main.extras</groupId>
    <artifactId>glassfish-embedded-all</artifactId>
    <version>4.1</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.servlet</artifactId>
    <version>3.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <scope>provided</scope>
</dependency>

我也试过这个,但没有运气:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <classpathDependencyExcludes>
            <!-- exclude code absent api -->                                    
            <classpathDependencyExclude>javax:javaee-api</classpathDependencyExclude>                                
            <classpathDependencyExclude>javax:javaee-web-api</classpathDependencyExclude>
        </classpathDependencyExcludes>
    </configuration>
</plugin>

这是 Maven 3.0.4 的错误:

[ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.0.2:sonar (default-cli) on project Filters: Execution default-cli of goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.0.2:sonar failed: An API incompatibility was encountered while executing org.sonarsource.scanner.maven:sonar-maven-plugin:3.0.2:sonar: java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/http/HttpServletRequestWrapper
[ERROR] -----------------------------------------------------
[ERROR] realm =    plugin>org.sonarsource.scanner.maven:sonar-maven-plugin:3.0.2
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/root/.m2/repository/org/sonarsource/scanner/maven/sonar-maven-plugin/3.0.2/sonar-maven-plugin-3.0.2.jar
[ERROR] urls[1] = file:/root/.m2/repository/org/apache/maven/shared/maven-dependency-tree/2.2/maven-dependency-tree-2.2.jar
[ERROR] urls[2] = file:/root/.m2/repository/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar
[ERROR] urls[3] = file:/root/.m2/repository/org/eclipse/aether/aether-util/0.9.0.M2/aether-util-0.9.0.M2.jar
[ERROR] urls[4] = file:/root/.m2/repository/org/sonatype/plexus/plexus-sec-dispatcher/1.4/plexus-sec-dispatcher-1.4.jar
[ERROR] urls[5] = file:/root/.m2/repository/org/sonatype/plexus/plexus-cipher/1.4/plexus-cipher-1.4.jar
[ERROR] urls[6] = file:/root/.m2/repository/org/codehaus/plexus/plexus-utils/3.0.22/plexus-utils-3.0.22.jar
[ERROR] urls[7] = file:/root/.m2/repository/org/sonarsource/scanner/api/sonar-scanner-api/2.6/sonar-scanner-api-2.6.jar
[ERROR] urls[8] = file:/root/.m2/repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar
[ERROR] urls[9] = file:/root/.m2/repository/com/google/guava/guava/18.0/guava-18.0.jar
[ERROR] urls[10] = file:/root/.m2/repository/com/google/code/findbugs/jsr305/2.0.3/jsr305-2.0.3.jar
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import  from realm ClassRealm[project>com.avaya.zephyr.services.sample_services.Authorization:Filters:3.4.0.0.0-SNAPSHOT, parent: ClassRealm[maven.api, parent: null]]]

该项目的 pom 看起来很像另一个没有错误的类似项目。但是,它确实有一个警告:

Apr 20, 2017 4:52:16 PM net.sourceforge.pmd.lang.java.typeresolution.ClassTypeResolver visit
WARNING: Could not find class myBetterClass, due to: java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/ws/rs/core/Application

我认为提供 glassfish 嵌入式 jar 应该可以解决此类问题。 (也许需要更新版本的 glassfish?)

【问题讨论】:

  • 你能用 mvn -X 运行并显示完整的输出吗?是否还有机会运行 Java 6?
  • 你看到了吗:issues.apache.org/jira/browse/MNG-5787?但实际上 3.0.4 应该不会受到影响。

标签: java maven sonarqube sonarqube-scan sonar-maven-plugin


【解决方案1】:

您可以尝试以下方法来解决此问题:

  1. 将 Maven 更新到 3.5.0 以将 Maven 维护到其最新版本。

  2. 您可以关注matrix here查看您使用的版本是否兼容。从日志中,您的构建使用 older version of the plugin

    .scanner.maven:sonar-maven-plugin:3.0.2

    尝试执行

    mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.3.0.603:sonar
    
  3. 确保您的排除在 pom.xml 的 &lt;properties&gt; 中标记为

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <sonar.host.url>http://www.example.com/</sonar.host.url>
        <sonar.exclusions>some/path/to/javax/javaee-api/**, some/path/to/javax:javaee-web-api</sonar.exclusions>
    </properties>
    

【讨论】:

  • 您是否解释了为什么会发生此错误以及为什么排除是可接受的解决方案?确实,我可以通过排除来解决问题,但这对我来说并不令人满意。这就像有一个编译错误并通过注释掉有问题的行来“解决”它;-)
  • @dokaspar 由于sonar-maven-plugin 正在使用中,documentation from the source as linked in answer 状态将声纳属性配置为properties 本身。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 1970-01-01
  • 2019-11-09
  • 2018-12-20
  • 2016-06-21
  • 2021-01-17
相关资源
最近更新 更多