own classes and test-classes at the end of test classpath
---------------------------------------------------------

                 Key: SUREFIRE-504
                 URL: http://jira.codehaus.org/browse/SUREFIRE-504
             Project: Maven Surefire
          Issue Type: Bug
          Components: plugin
    Affects Versions: 2.4
         Environment: Maven 2.0.9, Windows XP
            Reporter: Torsten Reinhard


Own classes and test-classes may be added to the end of the classpath:

[DEBUG] Adding to surefire test classpath: 
s:\mavenrepo\org\apache\maven\surefire\surefire-api\2.4\surefire-api-2.4.jar
[DEBUG] Test Classpath :
[DEBUG]   s:\mavenrepo\log4j\log4j\1.2.13\log4j-1.2.13.jar
...
[DEBUG]   s:\mavenrepo\org\apache\xmlsec\1.4.1\xmlsec-1.4.1.jar
[DEBUG]   S:\pdv_cms\GDCAMS\src\pip\gdcams-pip-itest\target\classes
[DEBUG]   S:\pdv_cms\GDCAMS\src\pip\gdcams-pip-itest\target\test-classes

This may happen, when you add the following terms to a parent pom.xml:

        <properties> 
          <target.dir>target</target.dir>
        </properties> 

        <build>
                ....
                <!-- special (output)Directory for Eclipse -->
                <!-- see 
http://docs.codehaus.org/display/M2ECLIPSE/Project+FAQ#ProjectFAQ-HowtoconfigureMavenprojecttouseseparateoutputfoldersinEclipse--
>
 
<outputDirectory>${project.basedir}/${target.dir}/classes</outputDirectory>
 
<testOutputDirectory>${project.basedir}/${target.dir}/test-classes</testOutputDirectory>
 

                ....
        </build>

<profiles>
    <profile>
      <id>eclipse-folders</id>
      <properties>
        <target.dir>target-eclipse</target.dir>
      </properties>
    </profile>
</profiles>

The reason for that is:

SurefirePlugin#constructSurefireBooter changes the classpath by doing:

...
        getLog().debug( "Test Classpath :" );

        // Check if we need to add configured classes/test classes directories 
here.
        // If they are configured, we should remove the default to avoid 
conflicts.
        if ( !project.getBuild().getOutputDirectory().equals( 
classesDirectory.getAbsolutePath() ) )
        {
            classpathElements.remove( project.getBuild().getOutputDirectory() );
            classpathElements.add( classesDirectory.getAbsolutePath() );
        }
        if ( !project.getBuild().getTestOutputDirectory().equals( 
testClassesDirectory.getAbsolutePath() ) )
        {
            classpathElements.remove( 
project.getBuild().getTestOutputDirectory() );
            classpathElements.add( testClassesDirectory.getAbsolutePath() );
        }
...

project.getBuild().getOutputDirectory() is like "${basedir}/target/classes"
classesDirectory.getAbsolutePath() is: "${basedir}\target\classes"

So i think here a 2 bugs:

(1) files/directories shouldn´t be compared just as String.equals(....) - using 
File.compareTo may be a better solution
(2) an Element of classpathElements shouldn´t be removed and added to the end 
of the ArrayList, it should be replaced at the same position.



-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira


Reply via email to