Test classpath resolution fails in mvn check:check when 
includeTestSourceDirectory = true
-----------------------------------------------------------------------------------------

                 Key: MCHECKSTYLE-163
                 URL: https://jira.codehaus.org/browse/MCHECKSTYLE-163
             Project: Maven 2.x Checkstyle Plugin
          Issue Type: Bug
    Affects Versions: 2.7
            Reporter: Chris Whelan
         Attachments: resolveTestClasspath.patch

When includeTestSourceDirectory=true is set for maven-checkstyle-plugin, the 
full test classpath should be made available to checkstyle.  Patch included to 
resolve issue by setting @requiresDependencyResolution to test.

In DefaultCheckstyleExecutor.java the checker.setClassLoader() is configured 
using the classpath string from request.getProject().getTestClasspathElements() 
(see DefaultCheckstyleExecutor line 114).

However, the CheckstyleViolationCheckMojo only has 
@requiresDependencyResolution compile which means that pom dependencies which 
have been declared as <scope>test</scope> are not returned by 
project.getTestClasspathElements().

This is a particular issue for the checkstyle RedundantThrows check 
(http://checkstyle.sourceforge.net/config_coding.html#RedundantThrows) as it 
requires all Exceptions to be available on it's classpath.

If code throws an Exception which has been imported from a maven 
<scope>test</scope> dependency, the exception will not be available on the 
classpath and this checkstyle check will fail.

Example:

Include junit as a test scope dependency in the project POM:
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>${junit.version}</version>
  <scope>test</scope>
</dependency>

Throw any junit exception within project test code, e.g.:
public class MyCustomTestRunner extends BlockJUnit4ClassRunner {
        public MyCustomTestRunner(final Class<?> klass) throws 
InitializationError {

If RedundantThrows check is enabled, the following error will be thrown:
[INFO] --- maven-checkstyle-plugin:2.7-SNAPSHOT:check (checkstyle-verify) @ 
sample-project ---
[INFO] Starting audit...
C:\Working\hg\sample-project\src\test\java\com\sample\support\junit\MyCustomTestRunner.java:28:72:
 warning: Unable to get class information for InitializationError.
Audit done.

[ERROR] MyCustomTestRunner.java[28:72] Unable to get class information for 
InitializationError.



--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to