summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--WHATSNEW4
-rw-r--r--src/main/org/apache/tools/ant/helper/ProjectHelper2.java2
-rw-r--r--src/main/org/apache/tools/ant/launch/Locator.java2
-rw-r--r--src/tests/antunit/taskdefs/taskdef-test.xml107
4 files changed, 113 insertions, 2 deletions
diff --git a/WHATSNEW b/WHATSNEW
index 4147b0a7a..81a78d7b4 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -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>