2017-04-20 367 views
3

我的一位開發人員在前幾天創建了一個新應用程序,現在我無法獲得良好的Sonar編譯。我已經嘗試了一些記錄的解決方法/解決方案來處理這種缺席代碼錯誤,但還沒有找到正確的組合。該項目包含glassfish和glassfish-embedded-jar,這些jar應該爲javax-servlet提供實現。他們被設置爲範圍測試。Sonar失敗,API缺乏兼容性,無法使用缺省代碼屬性

<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嵌入式罐子本來是要解決這類問題的。 (也許有需要的GlassFish的新版本?)

+0

你可以運行mvn -X並顯示完整的輸出嗎?而且還有可能仍然運行Java 6? – fhossfel

+0

你見過這個:https://issues.apache.org/jira/browse/MNG-5787?但實際上3.0.4應該不會受到影響。 – fhossfel

回答

2

您可以嘗試嘗試解決這個如下:

  1. 更新Maven來3.5.0保持Maven來它的最新版本。

  2. 您可以按照matrix here查看您使用的版本是否兼容。從日誌中,您的構建是使用older version of the plugin

    .scanner.maven:聲納Maven的插件:3.0.2

    嘗試執行

    mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.3.0.603:sonar 
    
  3. 確保您的排除在pom.xml的<properties>內標記爲

    <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> 
    
+0

您是否有解釋爲何發生此錯誤的原因以及爲什麼排除是可接受的解決方案?事實上,我可以通過排除來解決問題,但這並不令我感到滿意。這就像有一個編譯錯誤,並通過註釋有問題的行來「解決」它;-) – dokaspar

+0

@dokaspar由於'sonar-maven-plugin'正在使用[源文件中的鏈接回答](https:/ /docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Maven#AnalyzingwithSonarQubeScannerforMaven-ProjectanalyzedwithMaven3)聲明將聲納屬性配置爲「屬性」本身。 – nullpointer