【发布时间】:2021-02-12 17:21:40
【问题描述】:
我有一个 javaee 项目,它具有以下依赖项:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<scope>provided</scope>
</dependency>
项目按预期正确构建、打包和部署。但是,当我尝试为此项目运行 SonarQube 构建时,我会收到以下类型的警告,其中包含最终的致命错误
Nov 04, 2015 11:18:31 AM net.sourceforge.pmd.lang.java.typeresolution.ClassTypeResolver visit
WARNING: Could not find class com.admin.agent.AgentAdminController, due to: java.lang.ClassFormatError: JVMCFRE074 no Code attribute specified; class=javax/servlet/GenericServlet, method=<init>()V, pc=0
....
....
[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.7.1:sonar (default-cli) on project build: Execution default-cli of goal org.codehaus.mojo:sonar-maven-plugin:2.7.1:sonar failed: An API incompatibility was encountered while executing org.codehaus.mojo:sonar-maven-plugin:2.7.1:sonar: java.lang.ClassFormatError: JVMCFRE074 no Code attribute specified; class=javax/servlet/jsp/PageContext, method=<init>()V, pc=0
经过一番搜索,我发现罪魁祸首是 javaee-api 依赖。仅作为 API(无实现)SonarQube 抱怨缺少类。我找到的唯一解决方案是用 jboss 实现替换依赖项:
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-6.0</artifactId>
<version>1.0.0.Final</version>
<type>pom</type>
<scope>provided</scope>
</dependency>
但是,这对我来说效果不佳。我不得不修改我的 pom 并删除我原来的 javaee-api 依赖项并替换它。这意味着我的构建都不能使用 javax.javaee-api 依赖项?
就我而言,Sonar 应该可以扫描功能性 Maven 构建。
如何向 Sonar 表明我希望它使用不同的依赖项进行构建(而不是项目 pom 中的依赖项),或者让它完全忽略 javax.javaee-api 依赖项?
【问题讨论】:
-
你之前显然已经问过这个问题并放弃了它:stackoverflow.com/questions/29152487/…。
-
@Gimby - 哇...你是对的;我什至不记得发过那个!我猜 6 个月后,我仍在寻找更好的解决方案!