13

希望有人可以提供帮助。

  • 我们的项目是一个Eclipse插件项目
  • 我们有一个 Jenkins 服务器
  • 我们的项目使用 Maven 和 Tycho(用于插件项目)进行构建管理
  • 我们安装了声纳服务器
  • 我们使用 Jenkins Web-Config 将 Sonar 集成到 Jenkins

现在,如果我们不使用 Sonar,一切都会好起来的。但是如果我们打开它,Sonar 的 Maven Cobertura 插件会抛出错误。其他一切(就输出而言)都可以。

现在,据我了解,会发生以下情况:

  • Jenkins 构建项目
  • Sonar 使用其静态代码分析插件和指标(Findbugs、PMD、RFC 等)
  • Sonar 启动 Cobertura 插件
  • Cobertura 尝试再次构建项目
  • Cobertura 没有成功构建它,因为它以不同的顺序构建它
  • Cobertura 失败

詹金斯的一些输出摘录:

[INFO] ------------------------------------------------------------------------
[INFO] Building Project
[INFO] ------------------------------------------------------------------------

[WARNING] The following dependencies could not be resolved at this point of the build but seem to be part of the reactor:

[WARNING] o de.tool.core:de.tool.core:eclipse-plugin:1.2.0-SNAPSHOT (provided)

[WARNING] Try running the build up to the lifecycle phase "package"

后来……建造顺序是先建造核心再进化,但进化似乎是Cobertura想要建造的第一件事……

[INFO]  Execute maven plugin cobertura-maven-plugin...
[INFO]  Execute org.codehaus.mojo:cobertura-maven-plugin:2.5:cobertura...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building de.tool.evolution 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] >>> cobertura-maven-plugin:2.5:cobertura (default-cli) @ de.tool.evolution >>>
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 35.240s
[INFO] Finished at: Tue Oct 25 11:28:29 CEST 2011
[INFO] Final Memory: 57M/231M

之后,构建总是类似于这样:

[INFO] ------------------------------------------------------------------------
[INFO] Building de.tool.core 1.2.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] >>> cobertura-maven-plugin:2.5:cobertura (default-cli) @ de.tool.core >>>
[INFO] 
[INFO] --- tycho-packaging-plugin:0.13.0:build-qualifier (default-build-qualifier) @ de.tool.core ---
[INFO] 
[INFO] --- tycho-packaging-plugin:0.13.0:validate-id (default-validate-id) @ de.tool.core ---
[INFO] 
[INFO] --- tycho-packaging-plugin:0.13.0:validate-version (default-validate-version) @ de.tool.core ---
[INFO] 
[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ de.tool.core ---
[INFO] Using 'Cp1252' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /var/lib/jenkins/jobs/testBuild/workspace/de.tool.core/src/main/resources
[INFO] 
[INFO] --- tycho-compiler-plugin:0.13.0:compile (default-compile) @ de.tool.core ---
[INFO] Using compile source roots from build.properties
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- cobertura-maven-plugin:2.5:instrument (default-cli) @ de.tool.core ---
[INFO] Cobertura 1.9.4.1 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file
Instrumenting 88 files to /var/lib/jenkins/jobs/testBuild/workspace/de.tool.core/target/generated-classes/cobertura
Cobertura: Saved information on 88 classes.
Instrument time: 256ms

[INFO] Instrumentation was successful.
[INFO] NOT adding cobertura ser file to attached artifacts list.
[INFO] 
[INFO] --- maven-resources-plugin:2.4.3:testResources (default-testResources) @ de.tool.core ---
[INFO] Using 'Cp1252' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /var/lib/jenkins/jobs/testBuild/workspace/de.tool.core/src/test/resources
[INFO] 
[INFO] <<< cobertura-maven-plugin:2.5:cobertura (default-cli) @ de.tool.core <<<
[INFO] 
[INFO] --- cobertura-maven-plugin:2.5:cobertura (default-cli) @ de.tool.core ---
[INFO] Cobertura 1.9.4.1 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file
Cobertura: Loaded information on 88 classes.
Report time: 800ms

[INFO] Cobertura Report generation was successful.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 50.133s
[INFO] Finished at: Tue Oct 25 11:28:44 CEST 2011
[INFO] Final Memory: 33M/263M

紧随其后的是警告:

[INFO]  Java bytecode scan...
[WARN]  Class 'de/tool/core/util/EObjectUtil' is not accessible through the ClassLoader.
[INFO]  Java bytecode scan done: 105 ms
...
The following classes needed for analysis were missing:
  de.tool.core.util.EObjectUtil

......以及最后一拳:

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] de.tool.core ............................... SUCCESS [2.364s]
[INFO] de.tool.evolution .......................... FAILURE [0.023s]
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:52.418s
[INFO] Finished at: Tue Oct 25 11:29:46 CEST 2011
[INFO] Final Memory: 51M/411M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project de.tool.evolution: Could not resolve dependencies for project de.tool.evolution:de.tool.evolution:eclipse-plugin:1.0.0-SNAPSHOT: Could not find artifact de.tool.core:de.tool.core:eclipse-plugin:1.2.0-SNAPSHOT -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal on project de.tool.evolution: Could not resolve dependencies for project de.tool.evolution:de.tool.evolution:eclipse-plugin:1.0.0-SNAPSHOT: Could not find artifact de.tool.core:de.tool.core:eclipse-plugin:1.2.0-SNAPSHOT

我的猜测是声纳中的构建顺序不正确。但它会如何变得混乱(因为 Jenkins 以正确的顺序构建项目)?

为什么 Cobertura 会再次建造这个项目?Jenkins 已经构建了它,Cobertura 可以使用从那里编译的类......还是我误解了什么?

4

1 回答 1

12

我刚刚使用 Sonar 完成了我公司的 Jenkins 服务器的配置,以便与我们的 Maven 构建项目一起使用。所以这是我必须经历的步骤。

在我的 pom.xml(Maven2 版本)中,我必须添加以下代码:

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>sonar-maven-plugin</artifactId>
            <version>1.0-beta-2</version>
        </plugin>

在我们的 Linux 构建服务器上,我们已经安装了 MySQL,因此我们遵循Wakaleo Consulting的说明,了解如何让 Sonar 与 MySQL 对话。请注意 Jenkins 配置部分中 MySQL URL 中的转义 & 符号;这让我们陷入了几次构建的循环。

另外,请注意,您不需要在 Maven 目标行中包含sonar:sonar目标...在项目级别启用 Sonar 足以让我们的 Jenkins 工作收集其所有统计信息。

我认为这涵盖了它。

于 2011-11-02T21:28:07.783 回答