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> | |||