git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@810060 13f79535-47bb-0310-9956-ffa450edef68master
@@ -939,6 +939,11 @@ Other changes: | |||
* <property> can now specify values as nested text. | |||
Bugzilla Report 32917. | |||
* a new parentFirst attribute on <javaresource> allows resources to | |||
be loaded from the specified classpath rather than the system | |||
classloader. | |||
Bugzilla Report 41369. | |||
Changes from Ant 1.7.0 TO Ant 1.7.1 | |||
============================================= | |||
@@ -149,6 +149,15 @@ implementations are also usable as single-element | |||
used to load the resource, constructed from the specified classpath.</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">parentFirst</td> | |||
<td valign="top">Whether to consult the parent classloader first - | |||
the parent classloader most likely is the system classloader - | |||
when using a nested classpath. Defaults | |||
to <code>true</code>.<br/> | |||
<em>Since Ant 1.8.0</em></td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
</table> | |||
<p>The classpath can also be specified as nested classpath element, | |||
@@ -17,6 +17,7 @@ | |||
*/ | |||
package org.apache.tools.ant.types.resources; | |||
import org.apache.tools.ant.AntClassLoader; | |||
import org.apache.tools.ant.Project; | |||
import org.apache.tools.ant.types.Resource; | |||
import org.apache.tools.ant.types.Path; | |||
@@ -31,13 +32,14 @@ import java.util.Stack; | |||
* | |||
* A Resource representation of anything that is accessed via a Java classloader. | |||
* The core methods to set/resolve the classpath are provided. | |||
* @since Ant 1.8 | |||
* @since Ant 1.8.0 | |||
* | |||
*/ | |||
public abstract class AbstractClasspathResource extends Resource { | |||
private Path classpath; | |||
private Reference loader; | |||
private boolean parentFirst = true; | |||
/** | |||
* Set the classpath to use when looking up a resource. | |||
@@ -116,6 +118,17 @@ public abstract class AbstractClasspathResource extends Resource { | |||
loader = r; | |||
} | |||
/** | |||
* Whether to consult the parent classloader first. | |||
* | |||
* <p>Only relevant if a classpath has been specified.</p> | |||
* | |||
* @since Ant 1.8.0 | |||
*/ | |||
public void setParentFirst(boolean b) { | |||
parentFirst = b; | |||
} | |||
/** | |||
* Overrides the super version. | |||
* @param r the Reference to set. | |||
@@ -165,7 +178,14 @@ public abstract class AbstractClasspathResource extends Resource { | |||
if (cl == null) { | |||
if (getClasspath() != null) { | |||
Path p = getClasspath().concatSystemClasspath(); | |||
cl = getProject().createClassLoader(p); | |||
if (parentFirst) { | |||
cl = getProject().createClassLoader(p); | |||
} else { | |||
cl = AntClassLoader.newAntClassLoader(getProject() | |||
.getCoreLoader(), | |||
getProject(), | |||
p, false); | |||
} | |||
} else { | |||
cl = JavaResource.class.getClassLoader(); | |||
} | |||
@@ -0,0 +1,62 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- | |||
Licensed to the Apache Software Foundation (ASF) under one or more | |||
contributor license agreements. See the NOTICE file distributed with | |||
this work for additional information regarding copyright ownership. | |||
The ASF licenses this file to You 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. | |||
--> | |||
<project default="antunit" xmlns:au="antlib:org.apache.ant.antunit"> | |||
<import file="../../antunit-base.xml"/> | |||
<target name="setUp"> | |||
<mkdir dir="${output}"/> | |||
</target> | |||
<target name="testUsesSystemClasspath" depends="setUp"> | |||
<copy todir="${output}"> | |||
<javaresource name="org/apache/tools/ant/antlib.xml"/> | |||
</copy> | |||
<au:assertFileExists file="${output}/org/apache/tools/ant/antlib.xml"/> | |||
</target> | |||
<target name="-setUpAntlibXmlInInput" depends="setUp"> | |||
<mkdir dir="${input}/org/apache/tools/ant"/> | |||
<echo file="${input}/org/apache/tools/ant/antlib.xml">Hello, world!</echo> | |||
</target> | |||
<target name="testParentFirstIsDefault" depends="-setUpAntlibXmlInInput"> | |||
<copy todir="${output}"> | |||
<javaresource name="org/apache/tools/ant/antlib.xml"> | |||
<classpath location="${input}"/> | |||
</javaresource> | |||
</copy> | |||
<au:assertFileExists file="${output}/org/apache/tools/ant/antlib.xml"/> | |||
<au:assertFilesDiffer | |||
expected="${input}/org/apache/tools/ant/antlib.xml" | |||
actual="${output}/org/apache/tools/ant/antlib.xml"/> | |||
</target> | |||
<target name="testParentFirstFalse" depends="-setUpAntlibXmlInInput"> | |||
<copy todir="${output}"> | |||
<javaresource name="org/apache/tools/ant/antlib.xml" | |||
parentFirst="false"> | |||
<classpath location="${input}"/> | |||
</javaresource> | |||
</copy> | |||
<au:assertFileExists file="${output}/org/apache/tools/ant/antlib.xml"/> | |||
<au:assertFilesMatch | |||
expected="${input}/org/apache/tools/ant/antlib.xml" | |||
actual="${output}/org/apache/tools/ant/antlib.xml"/> | |||
</target> | |||
</project> |