如果在构建作业中设置 MAVEN_OPTS,则 Hudson SonarPlugin 失败

Hudson SonarPlugin fails if MAVEN_OPTS are set in build job

我使用 hudson SonarPlugin 配置了 post build sonarqube 分析。我将 SonarPlugin 的 MAVEN_OPTS 配置为如下所示: “-Xmx1024m -Dmaven.javadoc.failOnError=false”

如果我 运行 作业在 hudson 尝试执行 post 构建操作时出现错误:

[workspace] $ mvn -f /home/hudson-3.3.0/jobs/myJob/workspace/pom.xml -e -B sonar:sonar -Dsonar.jdbc.driver=oracle.jdbc.OracleDriver -Dsonar.jdbc.url=jdbc:oracle:thin:@xxxxx:1521/xxxx ******** ******** -Dsonar.host.url=http://xxxx:9000/sonar
Error: Could not find or load main class MAVEN_OPTS
Sonar analysis completed: FAILURE

我使用以下设置:
Tomcat8.0.24
哈德森 3.3.0
声纳插件 2.0.1
Maven 3.0.5 / 3.2.5
JDK1.7.0_45

在带有 Sonar-Plugin 1.8.1 的旧 hudson 版本上,构建工作正常。

作为解决方法,我将 MAVEN_OPTS 路径变量配置为包含预期的设置,但由于我必须使用不同的设置配置不同的作业,这只是一种解决方法。

有人知道如何解决这个问题吗?

正如您在 Bug 474406 it is a bug of Hudson 3.3.x. It has nothing to do with Sonar Plugin 2.0.1 中看到的那样,它与 Hudson 3.1.2 一起工作得很好。

它发生在 Hudson post 构建操作中:

解决方法是添加 build parameter to a job, see Bug 474406:

虽然 dur 的解决方案工作正常,但它的缺点是 "build now" link 要求构建参数而不是仅仅构建。

为了让它在不需要参数化构建的情况下工作,我更改了 hudson 的 $HOME/.mavenrc 以包含以下行:

export MAVEN_OPTS="$(echo ${MAVEN_OPTS} | sed -e 's#^MAVEN_OPTS ##')"

这会从 MAVEN_OPTS 变量中删除前导 "MAVEN_OPTS"。因此,如果 hudson/the 插件正在设置 MAVEN_OPTS="MAVEN_OPTS -Xmx128m" 此 mavenrc 将更改 MAVEN_OPTS 以仅包含 -Xmx128m.