Browse Source

according to the javadocs of JarURLConnection the separator is !/ not ! - this allows dealing with jars in directories that contain a ! in their name, as long as it is not at the end of the directory name. PR 50007

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@1001756 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 14 years ago
parent
commit
3ef6daa0c0
4 changed files with 113 additions and 2 deletions
  1. +4
    -0
      WHATSNEW
  2. +1
    -1
      src/main/org/apache/tools/ant/helper/ProjectHelper2.java
  3. +1
    -1
      src/main/org/apache/tools/ant/launch/Locator.java
  4. +107
    -0
      src/tests/antunit/taskdefs/taskdef-test.xml

+ 4
- 0
WHATSNEW View File

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



+ 1
- 1
src/main/org/apache/tools/ant/helper/ProjectHelper2.java View File

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


+ 1
- 1
src/main/org/apache/tools/ant/launch/Locator.java View File

@@ -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);
}


+ 107
- 0
src/tests/antunit/taskdefs/taskdef-test.xml View File

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

Loading…
Cancel
Save