git.net

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Junit Task warning about multiple versions of Ant



> Le 12 avr. 2018 à 16:57, Stefan Bodewig <bodewig@xxxxxxxxxx> 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>


( ! ) Warning: include(msgfooter.php): failed to open stream: No such file or directory in /var/www/git/apache-ant-development/msg01817.html on line 106
Call Stack
#TimeMemoryFunctionLocation
10.0007368696{main}( ).../msg01817.html:0

( ! ) Warning: include(): Failed opening 'msgfooter.php' for inclusion (include_path='.:/var/www/git') in /var/www/git/apache-ant-development/msg01817.html on line 106
Call Stack
#TimeMemoryFunctionLocation
10.0007368696{main}( ).../msg01817.html:0