Browse Source

with the bugzilla change 30161 it is not necessary to place

Path.systemClasspath in the antclassloader
Doing so causes resources to appear twice


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277160 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Reilly 20 years ago
parent
commit
6d6bbfeb10
3 changed files with 77 additions and 9 deletions
  1. +4
    -0
      WHATSNEW
  2. +7
    -9
      src/main/org/apache/tools/ant/util/ClasspathUtils.java
  3. +66
    -0
      src/testcases/org/apache/tools/ant/util/ClasspathUtilsTest.java

+ 4
- 0
WHATSNEW View File

@@ -174,6 +174,10 @@ Fixed bugs:
* Incorrect classloader parent in junittask when using with ant-junit.jar and junit.jar * Incorrect classloader parent in junittask when using with ant-junit.jar and junit.jar
not in the project classloader. Bugzilla report 28474. not in the project classloader. Bugzilla report 28474.


* getResources() on the classloader returned by ClasspathUtils would see each resource
twice - if the resource is in the project classpath and if the classloader is requested
with a null path.

Changes from Ant 1.6.1 to Ant 1.6.2 Changes from Ant 1.6.1 to Ant 1.6.2
=================================== ===================================




+ 7
- 9
src/main/org/apache/tools/ant/util/ClasspathUtils.java View File

@@ -156,13 +156,13 @@ public class ClasspathUtils {
* 'ant.reuse.loader' this will try to reuse the perviously * 'ant.reuse.loader' this will try to reuse the perviously
* created loader with that id, and of course store it there upon * created loader with that id, and of course store it there upon
* creation.</p> * creation.</p>
* @param path Path object to be used as classpath for this classloader
* @param loaderId identification for this Loader,
* @param path Path object to be used as classpath for this classloader
* @param loaderId identification for this Loader,
* @param reverseLoader if set to true this new loader will take * @param reverseLoader if set to true this new loader will take
* precedence over it's parent (which is contra the regular
* @param p Ant Project where the handled components are living in.
* classloader behaviour)
* @return ClassLoader that uses the Path as its classpath.
* precedence over it's parent (which is contra the regular
* classloader behaviour)
* @param p Ant Project where the handled components are living in.
* @return ClassLoader that uses the Path as its classpath.
*/ */
public static ClassLoader getClassLoaderForPath( public static ClassLoader getClassLoaderForPath(
Project p, Path path, String loaderId, boolean reverseLoader, Project p, Path path, String loaderId, boolean reverseLoader,
@@ -205,9 +205,7 @@ public class ClasspathUtils {
Project p, Project p,
Path path, Path path,
boolean reverseLoader) { boolean reverseLoader) {

AntClassLoader acl = p.createClassLoader(path != null
? path : Path.systemClasspath);
AntClassLoader acl = p.createClassLoader(path);
if (reverseLoader) { if (reverseLoader) {
acl.setParentFirst(false); acl.setParentFirst(false);
acl.addJavaLibraries(); acl.addJavaLibraries();


+ 66
- 0
src/testcases/org/apache/tools/ant/util/ClasspathUtilsTest.java View File

@@ -0,0 +1,66 @@
/*
* Copyright 2000-2002,2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

package org.apache.tools.ant.util;

import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import junit.framework.TestCase;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.Path;


/**
* Test case for ClasspathUtils
*
*/
public class ClasspathUtilsTest extends TestCase {

private Project p;

public ClasspathUtilsTest(String name) {
super(name);
}

public void setUp() {
p = new Project();
p.init();
}


public void testOnlyOneInstance() {
Enumeration enumeration;
String list = "";
ClassLoader c = ClasspathUtils.getUniqueClassLoaderForPath(p, (Path) null, false);
try {
enumeration = c.getResources(
"org/apache/tools/ant/taskdefs/defaults.properties");
} catch (IOException e) {
throw new BuildException(
"Could not get the defaults.properties resource");
}
int count = 0;
while (enumeration.hasMoreElements()) {
list = list + " " + enumeration.nextElement();
count++;
}
assertTrue("Should be only one and not " + count + " " + list, count == 1);
}
}

Loading…
Cancel
Save