ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Nicolas Lalevée <nicolas.lale...@hibnet.org>
Subject Re: Junit Task warning about multiple versions of Ant
Date Thu, 12 Apr 2018 17:13:23 GMT


> Le 12 avr. 2018 à 16:57, Stefan Bodewig <bodewig@apache.org> a écrit :
> 
> On 2018-04-12, Nicolas Lalevée wrote:
> 
>> The Junit task is printing a warning if it finds multiple versions of
>> Ant in the classpath of the unit tests. It seems it doesn’t do
>> correctly the job if the ant runtime is explicitly removed from the
>> classpath.
> 
> Quite possible.
> 
>> Here the function which checks the classpath:
>> https://github.com/apache/ant/blob/master/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java#L1362
<https://github.com/apache/ant/blob/master/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java#L1362>
> 
> this is in the forked case.
> 
>> And here is the one which build the classloader during the actual forked run:
>> https://github.com/apache/ant/blob/master/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java#L1952
<https://github.com/apache/ant/blob/master/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java#L1952>
> 
> AFAICT createClassloader is not invoked for forked VMs, only in the
> non-forked case.
> 
>> Shouldn’t the classloader be built the same way in both function?
> 
> In the forked case, the classloader is not built by the task, the
> CommandLineJava instance collects the classpath and sets it as
> -classpath command line argument.

Ha yes, you’re right.

As far as I can see, the classpath used by checkForkedPath is the proper one. The function
which manipulates the classpath to add the Ant runtime [1] is called before. So I should start
looking into the AntClassLoader which is improperly finding the Ant classes. Maybe we should
« isolate » it.

Or maybe that check for duplicate ant jar is only useful when includeantruntime is _not_ set
to « no ». Since includeantruntime is true by default, it is nice that Ant is printing a
warning when it also find Ant classes in the provided classpath, it is a common pitfall. But
when includeantruntime is explicitely set to false, then I would say that the user know what
he's doing, thus no need for special check.

Nicolas

[1] https://github.com/apache/ant/blob/master/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java#L1320
<https://github.com/apache/ant/blob/master/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java#L1320>
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message