diff options
-rw-r--r-- | WHATSNEW | 4 | ||||
-rw-r--r-- | src/main/org/apache/tools/ant/helper/ProjectHelper2.java | 2 | ||||
-rw-r--r-- | src/main/org/apache/tools/ant/launch/Locator.java | 2 | ||||
-rw-r--r-- | src/tests/antunit/taskdefs/taskdef-test.xml | 107 |
4 files changed, 113 insertions, 2 deletions
@@ -153,6 +153,10 @@ Fixed bugs: * runant.py would swallow the first argument if CLASSPATH wasn't set. Bugzilla Report 49963. + * <taskdef> failed to load resources from jar files contained in a + directory that has a "!" in its name. + Bugzilla Report 50007. + Other changes: -------------- diff --git a/src/main/org/apache/tools/ant/helper/ProjectHelper2.java b/src/main/org/apache/tools/ant/helper/ProjectHelper2.java index 681c39691..e5ff216fa 100644 --- a/src/main/org/apache/tools/ant/helper/ProjectHelper2.java +++ b/src/main/org/apache/tools/ant/helper/ProjectHelper2.java @@ -279,7 +279,7 @@ public class ProjectHelper2 extends ProjectHelper { uri = url.toString(); int pling = -1; if (uri.startsWith("jar:file") - && (pling = uri.indexOf("!")) > -1) { + && (pling = uri.indexOf("!/")) > -1) { zf = new ZipFile(org.apache.tools.ant.launch.Locator .fromJarURI(uri), "UTF-8"); inputStream = diff --git a/src/main/org/apache/tools/ant/launch/Locator.java b/src/main/org/apache/tools/ant/launch/Locator.java index 41abfe88a..eb3efe995 100644 --- a/src/main/org/apache/tools/ant/launch/Locator.java +++ b/src/main/org/apache/tools/ant/launch/Locator.java @@ -281,7 +281,7 @@ public final class Locator { * @since Ant1.7.1 */ public static String fromJarURI(String uri) { - int pling = uri.indexOf('!'); + int pling = uri.indexOf("!/"); String jarName = uri.substring("jar:".length(), pling); return fromURI(jarName); } diff --git a/src/tests/antunit/taskdefs/taskdef-test.xml b/src/tests/antunit/taskdefs/taskdef-test.xml new file mode 100644 index 000000000..da5a83ae8 --- /dev/null +++ b/src/tests/antunit/taskdefs/taskdef-test.xml @@ -0,0 +1,107 @@ +<?xml version="1.0"?> +<!-- + 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="${input}/org/example"/> + <echoxml file="${input}/org/example/antlib.xml"> + <antlib> + <taskdef name="echooo" + classname="org.apache.tools.ant.taskdefs.Echo"/> + </antlib> + </echoxml> + </target> + + <target name="testPlainDir" depends="setUp"> + <tempfile property="jar" deleteonexit="true" + destdir="${java.io.tmpdir}" prefix="test" suffix=".jar"/> + <jar destfile="${jar}"> + <fileset dir="${input}"/> + </jar> + <taskdef resource="org/example/antlib.xml" + classpath="${jar}" + uri="urn:test:plain"/> + <echooo xmlns="urn:test:plain">Hello</echooo> + <au:assertLogContains text="Hello"/> + </target> + + <target name="testDirWithPling" depends="setUp" + description="https://issues.apache.org/bugzilla/show_bug.cgi?id=50007"> + <property name="dir" location="${java.io.tmpdir}/pl!ng"/> + <mkdir dir="${dir}"/> + <tempfile property="jar" deleteonexit="true" destdir="${dir}" + prefix="test" suffix=".jar"/> + <jar destfile="${jar}"> + <fileset dir="${input}"/> + </jar> + <taskdef resource="org/example/antlib.xml" + classpath="${jar}" + uri="urn:test:indir"/> + <echooo xmlns="urn:test:indir">Hello</echooo> + <au:assertLogContains text="Hello"/> + </target> + + <!-- fails because URLConnection.connect() fails on the JAR URL returned + by ClassLoader.getResources() --> + <target name="NOtestDirWithPlingAtEnd" depends="setUp" + description="https://issues.apache.org/bugzilla/show_bug.cgi?id=50007"> + <property name="dir" location="${java.io.tmpdir}/pling!"/> + <mkdir dir="${dir}"/> + <tempfile property="jar" deleteonexit="true" destdir="${dir}" + prefix="test" suffix=".jar"/> + <jar destfile="${jar}"> + <fileset dir="${input}"/> + </jar> + <taskdef resource="org/example/antlib.xml" + classpath="${jar}" + uri="urn:test:atend"/> + <echooo xmlns="urn:test:atend">Hello</echooo> + <au:assertLogContains text="Hello"/> + </target> + + <target name="testPlingInJar" depends="setUp"> + <tempfile property="jar" deleteonexit="true" + destdir="${java.io.tmpdir}" prefix="test" suffix=".jar"/> + <move file="${input}/org/example/antlib.xml" + tofile="${input}/org/examp!e/antlib.xml"/> + <jar destfile="${jar}"> + <fileset dir="${input}"/> + </jar> + <taskdef resource="org/examp!e/antlib.xml" + classpath="${jar}" + uri="urn:test:injar"/> + <echooo xmlns="urn:test:injar">Hello</echooo> + <au:assertLogContains text="Hello"/> + </target> + + <target name="testPlingInJarAtEnd" depends="setUp"> + <tempfile property="jar" deleteonexit="true" + destdir="${java.io.tmpdir}" prefix="test" suffix=".jar"/> + <move file="${input}/org/example/antlib.xml" + tofile="${input}/org/example!/antlib.xml"/> + <jar destfile="${jar}"> + <fileset dir="${input}"/> + </jar> + <taskdef resource="org/example!/antlib.xml" + classpath="${jar}" + uri="urn:test:injaratend"/> + <echooo xmlns="urn:test:injaratend">Hello</echooo> + <au:assertLogContains text="Hello"/> + </target> +</project> |