-
Bug
-
Resolution: Incomplete
-
Blocker
-
None
-
Tested with Jenkins 1.451
There are three problems related to the cobertura-maven-plugin:
1) Even though my project does NOT have the cobertura-maven-plugin in its build/plugins-section, this maven-plugin is magically added by Jenkins to the build process. I did NOT enable any cobertura-related setting in the job, either.
2) The cobertura-maven-plugin causes the build to fail with a NullPointerException:
Caused by: java.lang.NullPointerException
at java.util.ArrayList.addAll(ArrayList.java:472)
at org.codehaus.mojo.cobertura.CoberturaReportMojo.getAllChildren(CoberturaReportMojo.java:574)
at org.codehaus.mojo.cobertura.CoberturaReportMojo.executeAggregateReport(CoberturaReportMojo.java:275)
at org.codehaus.mojo.cobertura.CoberturaReportMojo.executeAggregateReport(CoberturaReportMojo.java:265)
at org.codehaus.mojo.cobertura.CoberturaReportMojo.executeReport(CoberturaReportMojo.java:251)
at org.apache.maven.reporting.AbstractMavenReport.generate(AbstractMavenReport.java:93)
...
3) It seems to be impossible to override the version of the cobertura-maven-plugin: No matter what version I declare in my parent-POM's pluginManagement, Jenkins always uses version 2.5.1
For you to reproduce, I created a new project from scratch (I only copied some files from other projects and stripped most of their contents). Here are all the links:
Project's SVN URL: https://dev.nightlabs.org/svn/public/main/experimentals/test20120216/
First build: https://dev.nightlabs.org/jenkins/job/org.nightlabs.test20120216/1/console
This build has been done with cobertura-maven-plugin's version being set to 2.4 in my plugin-MANAGEMENT. Still the build on Jenkins uses version 2.5.1. Note, that the cobertura-maven-plugin is NOT listed in the plugins-section (but only in the pluginManagement). Therefore, it should not be included in the build process at all. When I run the build locally with "mvn clean install", it does not occur, too. Here's the log: https://dev.nightlabs.org/svn/public/main/experimentals/test20120216/org.nightlabs.test20120216.all/mvn_clean_install.ganesha.log
Second build: https://dev.nightlabs.org/jenkins/job/org.nightlabs.test20120216/2/console
This build has been done with the cobertura-maven-plugin being commented out from the pluginManagement. Now, the "Effective POM" in m2e shows me NO Cobertura AT ALL anymore and still the result is the same.
3rd and 4th build:
I added configuration/skip=true in the parent-POM with the result that the build now works fine. But it does so only, because there is no unit test, yet (there is an integration test, but no unit test).
5th build: https://dev.nightlabs.org/jenkins/job/org.nightlabs.test20120216/5/console
I added a unit test which produces this error in the log output (when being run the 2nd time):
*********
Tests in error:
doSomething(org.nightlabs.test20120216.client.test.SomeTest): org/nightlabs/test20120216/client/TestClient
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0
[ERROR] There are test failures.
*********
Despite this error, the build succeeds. However, this is not always the case: In another project, this is handled as a fatal error and breaks the build. I was not able to find out where's the difference. However, this 2nd test run should not happen at all in the first place.
The problem is obviously that the cobertura-maven-plugin is correctly skipped (and thus does not instrument any class), but the unit-tests are still executed twice. And the second time, it tries to access instrumented classes, which do not exist.
Here's what I did in Jenkins (version 1.451) to create the job (I did NOT enable any cobertura-related things!):
=> New Job
==> Job name = org.nightlabs.test20120216
==> Build a maven2/3 project
==> OK
==> Enable project-based security
===> Read access for Anonymous
==> Source Code Management
===> Subversion CHECKED
===> Repository URL = https://dev.nightlabs.org/svn/public/main/experimentals/test20120216/
===> Check-out Strategy = Emulate clean checkout by first deleting unversioned/ignored files, then 'svn update'
==> Build
===> Root POM = org.nightlabs.test20120216.all/pom.xml
==> Save
I found out how to make the 2nd surefire-run (after the skipped cobertura-instrumentalisation) fail the whole build:
https://dev.nightlabs.org/jenkins/job/org.nightlabs.test20120216/7/console
If a method of a unit test returns an instance of a class that is located in the same project's src/main/java/, then surefire crashes when it tries to collect the test methods and the build breaks.