You are viewing a plain text version of this content. The canonical link for it is here.
Posted to surefire-dev@maven.apache.org by Kenney Westerhof <ke...@apache.org> on 2006/09/01 14:15:36 UTC
Re: svn commit: r438999 -
/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireBooter.java
Brett Porter wrote:
> Could this break any existing tests?
Yes, if those tests were wrong. Effectively the difference is that
you no longer have $M2_HOME/core/*.jar in the classpath.
Two scenarios:
- the tests dependended on those libs but didn't declare them as test dependencies.
This can only be a problem if they use Class.forName(), but then they should've declared
them as dependencies.
- tests define a different version of those libs as dependencies, for instance plexus-utils-<something else than 1.1>.
Now the tests will actually use the declared dependency instead of the one that maven uses.
If the tests break: great! then the code was bad.
This commit will probably fix a bunch of JIRA issues for surefire or maven-surefire-plugin.
I found this problem because my unit tests in continuum gave a 'NoSuchMethodError: setPid(..) in Commandline'.
(available in plexus-utils-1.2).
When i asked where Commandline came from it was from plexus-utils-1.1 from the maven directory. The tests
ran fine in eclipse, which uses ONLY the dependencies declared in the POM.
So this seems the correct behaviour to me.
-- Kenney
>
> - Brett
>
> On 01/09/2006, at 4:21 AM, kenney@apache.org wrote:
>
>> Author: kenney
>> Date: Thu Aug 31 11:21:53 2006
>> New Revision: 438999
>>
>> URL: http://svn.apache.org/viewvc?rev=438999&view=rev
>> Log:
>> Set parent classloader to null for the testsClassLoader.
>>
>> If this is not done, the System classloader is added, in this case
>> an AppClassloader containing everything in the root classpath.
>> For instance, in maven, everything in core/ is available.
>> This can cause clashes with the plexus-utils used in maven itself.
>>
>> Modified:
>>
>> maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireBooter.java
>>
>>
>> Modified:
>> maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireBooter.java
>>
>> URL:
>> http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireBooter.java?rev=438999&r1=438998&r2=438999&view=diff
>>
>> ==============================================================================
>>
>> ---
>> maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireBooter.java
>> (original)
>> +++
>> maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireBooter.java
>> Thu Aug 31 11:21:53 2006
>> @@ -203,7 +203,7 @@
>> ClassLoader surefireClassLoader =
>> createClassLoader( surefireClassPathUrls,
>> getClass().getClassLoader(), true );
>>
>> - ClassLoader testsClassLoader = createClassLoader(
>> classPathUrls, childDelegation, true );
>> + ClassLoader testsClassLoader = createClassLoader(
>> classPathUrls, null, childDelegation, true );
>>
>> Class surefireClass = surefireClassLoader.loadClass(
>> Surefire.class.getName() );
>>
>> @@ -243,7 +243,7 @@
>> {
>> // The test classloader must be constructed first to
>> avoid issues with commons-logging until we properly
>> // separate the TestNG classloader
>> - ClassLoader testsClassLoader = createClassLoader(
>> classPathUrls, childDelegation, true );
>> + ClassLoader testsClassLoader = createClassLoader(
>> classPathUrls, null, childDelegation, true );
>>
>> ClassLoader surefireClassLoader =
>> createClassLoader( surefireClassPathUrls,
>> getClass().getClassLoader(), true );
>> @@ -289,7 +289,7 @@
>> ClassLoader surefireClassLoader;
>> try
>> {
>> - testsClassLoader = createClassLoader( classPathUrls,
>> false, true );
>> + testsClassLoader = createClassLoader( classPathUrls,
>> null, false, true );
>> // TODO: assertions = true shouldn't be required if we
>> had proper separation (see TestNG)
>> surefireClassLoader = createClassLoader(
>> surefireClassPathUrls, false, true );
>> }
>> @@ -586,7 +586,10 @@
>> try
>> {
>> Object[] args = new Object[]{assertionsEnabled ?
>> Boolean.TRUE : Boolean.FALSE};
>> - assertionStatusMethod.invoke( parent, args );
>> + if ( parent != null )
>> + {
>> + assertionStatusMethod.invoke( parent, args );
>> + }
>> assertionStatusMethod.invoke( classLoader, args );
>> }
>> catch ( IllegalAccessException e )
>>