You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ivy-commits@incubator.apache.org by ma...@apache.org on 2007/05/08 21:50:23 UTC

svn commit: r536344 - in /incubator/ivy/core/trunk: ant.patterns build.properties build.xml optional.patterns src/java/org/apache/ivy/core/settings/IvySettings.java src/java/org/apache/ivy/util/url/URLHandlerRegistry.java

Author: maartenc
Date: Tue May  8 14:50:22 2007
New Revision: 536344

URL: http://svn.apache.org/viewvc?view=rev&rev=536344
Log:
bootstrap Ivy (instead of downloading a previous version) to resolve our own dependencies...

Added:
    incubator/ivy/core/trunk/ant.patterns
    incubator/ivy/core/trunk/optional.patterns
Modified:
    incubator/ivy/core/trunk/build.properties
    incubator/ivy/core/trunk/build.xml
    incubator/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java
    incubator/ivy/core/trunk/src/java/org/apache/ivy/util/url/URLHandlerRegistry.java

Added: incubator/ivy/core/trunk/ant.patterns
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/ant.patterns?view=auto&rev=536344
==============================================================================
--- incubator/ivy/core/trunk/ant.patterns (added)
+++ incubator/ivy/core/trunk/ant.patterns Tue May  8 14:50:22 2007
@@ -0,0 +1,2 @@
+#This file defines the sources to compile for ivy-ant.jar
+org/apache/ivy/ant/**/*.java
\ No newline at end of file

Modified: incubator/ivy/core/trunk/build.properties
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/build.properties?view=diff&rev=536344&r1=536343&r2=536344
==============================================================================
--- incubator/ivy/core/trunk/build.properties (original)
+++ incubator/ivy/core/trunk/build.properties Tue May  8 14:50:22 2007
@@ -21,6 +21,9 @@
 test.dir=${basedir}/test/java
 build.dir=${basedir}/build
 classes.build.dir=${basedir}/build/classes
+core.classes.build.dir=${classes.build.dir}/core
+ant.classes.build.dir=${classes.build.dir}/ant
+optional.classes.build.dir=${classes.build.dir}/optional
 test.build.dir=${basedir}/build/test
 artifacts.build.dir=${basedir}/build/artifact
 distrib.dir=${basedir}/build/distrib

Modified: incubator/ivy/core/trunk/build.xml
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/build.xml?view=diff&rev=536344&r1=536343&r2=536344
==============================================================================
--- incubator/ivy/core/trunk/build.xml (original)
+++ incubator/ivy/core/trunk/build.xml Tue May  8 14:50:22 2007
@@ -16,18 +16,11 @@
    specific language governing permissions and limitations
    under the License.    
 -->
-<project name="ivy" default="coverage-report" xmlns:ivy="antlib:fr.jayasoft.ivy.ant">
+<project name="ivy" default="coverage-report" xmlns:ivy="antlib:org.apache.ivy.ant">
 	<property environment="env"/>
 	<property file="version.properties"/>
 	<property file="build.properties"/>
 
-    <!-- =================================================================
-               IVY AUTO INSTALL
-               Ivy eats its own dog food, and thus require Ivy jar to
-               be built. This section will download Ivy from
-               internet and use it for ivy tasks of this build.
-         ================================================================= -->
-	
 	<property name="final.name" value="ivy.jar" />
 	<property name="final.core.name" value="ivy-core.jar" />
 	
@@ -42,39 +35,19 @@
 		<property name="ivy.home" value="${basedir}/.ivy" />
 	</target>
 	
-	<target name="init-ivy-jar">
-		<property name="ivy.jar.dir" value="${ivy.home}/jars" />
-		<property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar" />
-	</target>
-	
-	<target name="init-ivy-home" depends="init-ivy-user-home, init-ivy-local-home, init-ivy-jar" />
+	<target name="init-ivy-home" depends="init-ivy-user-home, init-ivy-local-home" />
 
-	<target name="download-ivy" depends="init-ivy-home" unless="offline">
-    	<mkdir dir="${ivy.jar.dir}"/>
-		<!-- download Ivy from web site so that it can be used even without any special installation -->
-		<!-- use a non standard location during migration to apache -->
-    	<get src="http://people.apache.org/~antoine/ivy/ivy-${ivy.install.version}.jar"
-    		 dest="${ivy.jar.file}" usetimestamp="true"/>
-	</target>
-	
-	<target name="check-ivy-available" depends="init-ivy-home">
-    	<path id="ivy.lib.path">
-    	    <fileset dir="${ivy.jar.dir}" includes="*.jar"/>
-    	</path>
-		<available property="ivy.available" resource="fr/jayasoft/ivy/ant/antlib.xml"
-					classpathref="ivy.lib.path" />
-	</target>
-	
-	<target name="init-ivy" depends="download-ivy,check-ivy-available" if="ivy.available">
-    	<!-- try to load ivy here from local ivy dir, in case the user has not already dropped
-    	      it into ant's lib dir (note that the latter copy will always take precedence).
-    	      We will not fail as long as local lib dir exists (it may be empty) and
-    	      ivy is in at least one of ant's lib dir or the local lib dir. -->
-    	<taskdef resource="fr/jayasoft/ivy/ant/antlib.xml"
-    	          uri="antlib:fr.jayasoft.ivy.ant" classpathref="ivy.lib.path"/>
-		<ivy:configure file="${basedir}/ivysettings.xml" /> <!-- not necessary with Ivy 2.0+ -->
+	<target name="init-ivy" depends="compile-ant">
+    	<taskdef resource="org/apache/ivy/ant/antlib.xml"
+    	         uri="antlib:org.apache.ivy.ant">
+			<classpath>
+				<pathelement location="${core.classes.build.dir}"/>
+				<pathelement location="${ant.classes.build.dir}"/>
+			</classpath>
+    	</taskdef>
+		
+		<ivy:configure />
     </target>
-
 	
 	<target name="install" depends="jar" description="build Ivy and install it in Ivy home for consecutive builds">
 		<copy file="${artifacts.build.dir}/${final.name}" tofile="${ivy.jar.file}"/>
@@ -91,7 +64,9 @@
 		</path>
 		<path id="run.classpath">
 			<path refid="build.classpath"/>
-			<pathelement location="${classes.build.dir}"/>
+			<pathelement location="${core.classes.build.dir}"/>
+			<pathelement location="${ant.classes.build.dir}"/>
+			<pathelement location="${optional.classes.build.dir}"/>
 		</path>
         <path id="test.classpath">
             <path refid="run.classpath"/>
@@ -101,6 +76,9 @@
 	
 	<target name="prepare" depends="init">
 	   <mkdir dir="${classes.build.dir}"/>
+	   <mkdir dir="${core.classes.build.dir}"/>
+	   <mkdir dir="${ant.classes.build.dir}"/>
+	   <mkdir dir="${optional.classes.build.dir}"/>
 	   <mkdir dir="${test.build.dir}"/>
 	   <mkdir dir="${artifacts.build.dir}"/>
 	   <mkdir dir="${test.report.dir}"/>
@@ -130,8 +108,6 @@
 	
 	<target name="clean-examples" description="clean all examples">
 		<subant target="clean" failonerror="false">
-			<!-- use current ivy jar dir for nested calls, to avoid downloading ivy several times -->
-			<property name="ivy.jar.dir" value="${ivy.jar.dir}"/>
     		<fileset dir="src/example" includes="**/build.xml"/>
         </subant>		
 	</target>
@@ -170,51 +146,100 @@
     <!-- =================================================================
                DEPENDENCY MNGT, COMPILATION AND JAR
          ================================================================= -->
-	<target name="resolve" depends="init-ivy, prepare" unless="no.resolve" if="ivy.available">
+	<target name="resolve" depends="init-ivy" unless="no.resolve">
 		<ivy:retrieve conf="default,test" />
 	</target>
 
-	<target name="build" depends="resolve">
-		<javac 	srcdir="${src.dir}"
-		        destdir="${classes.build.dir}"
-		        classpathref="build.classpath"
+	<target name="compile-core" depends="prepare">
+		<javac	srcdir="${src.dir}"
+		       	destdir="${core.classes.build.dir}"
+				sourcepath="" 
 				source="${ivy.minimum.javaversion}"
 				target="${ivy.minimum.javaversion}"
-		        debug="${debug.mode}"
-				includeantruntime="no"/>
+	    	    debug="${debug.mode}"
+				includeantruntime="no">
+			<excludesfile name="ant.patterns" />
+			<excludesfile name="optional.patterns" />
+		</javac>
+		<copy todir="${core.classes.build.dir}" includeEmptyDirs="false">
+    		<fileset dir="${src.dir}">
+    			<include name="org/apache/ivy/core/**" />
+      			<exclude name="**/*.java"/>
+    		</fileset>
+  		</copy>
+		
+		<!-- copy settings files for backward compatibility with ivyconf naming -->
+		<copy file="${core.classes.build.dir}/org/apache/ivy/core/settings/ivysettings-local.xml"
+			tofile="${core.classes.build.dir}/org/apache/ivy/core/settings/ivyconf-local.xml" />
+		<copy file="${core.classes.build.dir}/org/apache/ivy/core/settings/ivysettings-default-chain.xml"
+			tofile="${core.classes.build.dir}/org/apache/ivy/core/settings/ivyconf-default-chain.xml" />
+		<copy file="${core.classes.build.dir}/org/apache/ivy/core/settings/ivysettings-main-chain.xml"
+			tofile="${core.classes.build.dir}/org/apache/ivy/core/settings/ivyconf-main-chain.xml" />
+		<copy file="${core.classes.build.dir}/org/apache/ivy/core/settings/ivysettings-public.xml"
+			tofile="${core.classes.build.dir}/org/apache/ivy/core/settings/ivyconf-public.xml" />
+		<copy file="${core.classes.build.dir}/org/apache/ivy/core/settings/ivysettings-shared.xml"
+			tofile="${core.classes.build.dir}/org/apache/ivy/core/settings/ivyconf-shared.xml" />
+		<copy file="${core.classes.build.dir}/org/apache/ivy/core/settings/ivysettings.xml"
+			tofile="${core.classes.build.dir}/org/apache/ivy/core/settings/ivyconf.xml" />
 	</target>
 
-	<target name="jar" depends="build, default-version">
-		<!--  copy resources -->
-		<copy todir="${classes.build.dir}">
+	<target name="compile-ant" depends="compile-core">
+		<javac	srcdir="${src.dir}"
+		       	destdir="${ant.classes.build.dir}"
+				sourcepath="" 
+				source="${ivy.minimum.javaversion}"
+				target="${ivy.minimum.javaversion}"
+	    	    debug="${debug.mode}"
+				includeantruntime="yes">
+			<classpath>
+				<pathelement location="${core.classes.build.dir}"/>
+			</classpath>
+			<includesfile name="ant.patterns" />
+		</javac>
+		<copy todir="${ant.classes.build.dir}" includeEmptyDirs="false">
     		<fileset dir="${src.dir}">
+    			<include name="org/apache/ivy/ant/**" />
       			<exclude name="**/*.java"/>
     		</fileset>
   		</copy>
-		<!-- copy antlib for backward compatibility with fr.jayasoft.ivy package -->
-		<copy file="${src.dir}/org/apache/ivy/ant/antlib.xml" 
-			  todir="${classes.build.dir}/fr/jayasoft/ivy/ant"/>
-		<!-- copy settings files for backward compatibility with ivyconf naming -->
-		<copy file="${classes.build.dir}/org/apache/ivy/core/settings/ivysettings-local.xml"
-			tofile="${classes.build.dir}/org/apache/ivy/core/settings/ivyconf-local.xml" />
-		<copy file="${classes.build.dir}/org/apache/ivy/core/settings/ivysettings-default-chain.xml"
-			tofile="${classes.build.dir}/org/apache/ivy/core/settings/ivyconf-default-chain.xml" />
-		<copy file="${classes.build.dir}/org/apache/ivy/core/settings/ivysettings-main-chain.xml"
-			tofile="${classes.build.dir}/org/apache/ivy/core/settings/ivyconf-main-chain.xml" />
-		<copy file="${classes.build.dir}/org/apache/ivy/core/settings/ivysettings-public.xml"
-			tofile="${classes.build.dir}/org/apache/ivy/core/settings/ivyconf-public.xml" />
-		<copy file="${classes.build.dir}/org/apache/ivy/core/settings/ivysettings-shared.xml"
-			tofile="${classes.build.dir}/org/apache/ivy/core/settings/ivyconf-shared.xml" />
-		<copy file="${classes.build.dir}/org/apache/ivy/core/settings/ivysettings.xml"
-			tofile="${classes.build.dir}/org/apache/ivy/core/settings/ivyconf.xml" />
 		
+		<!-- copy antlib for backward compatibility with fr.jayasoft.ivy package -->
+		<copy file="${ant.classes.build.dir}/org/apache/ivy/ant/antlib.xml" 
+			  todir="${ant.classes.build.dir}/fr/jayasoft/ivy/ant"/>
+	</target>
+	
+	<target name="compile-optional" depends="compile-ant, resolve">
+		<javac	srcdir="${src.dir}"
+		       	destdir="${optional.classes.build.dir}"
+				sourcepath="" 
+				source="${ivy.minimum.javaversion}"
+				target="${ivy.minimum.javaversion}"
+	    	    debug="${debug.mode}"
+				includeantruntime="no">
+			<classpath>
+				<pathelement location="${core.classes.build.dir}"/>
+				<fileset dir="${lib.dir}">
+			        <include name="**/*.jar"/>
+			    </fileset>
+			</classpath>
+			<includesfile name="optional.patterns" />
+		</javac>
+		<copy todir="${core.classes.build.dir}" includeEmptyDirs="false">
+    		<fileset dir="${src.dir}">
+    			<exclude name="org/apache/ivy/core/**" />
+    			<exclude name="org/apache/ivy/ant/**" />
+      			<exclude name="**/*.java"/>
+    		</fileset>
+  		</copy>
+	</target>
+
+	<target name="jar" depends="compile-optional, default-version">
   		<!-- identify compiled ivy version -->
-		<echo message="version=${build.version}${line.separator}" file="${classes.build.dir}/module.properties" append="true"/>
-		<echo message="date=${pubdate}${line.separator}" file="${classes.build.dir}/module.properties" append="true"/>
+		<echo message="version=${build.version}${line.separator}" file="${core.classes.build.dir}/module.properties" append="true"/>
+		<echo message="date=${pubdate}${line.separator}" file="${core.classes.build.dir}/module.properties" append="true"/>
 
 		<!-- package the two ivy jars -->
   		<jar 	destfile="${artifacts.build.dir}/${final.name}"
-				basedir="${classes.build.dir}"
   				manifest="${basedir}/MANIFEST.MF">
   			<metainf dir="${basedir}" includes="LICENSE,DISCLAIMER,NOTICE" />
 			<manifest>
@@ -230,17 +255,20 @@
 					<attribute name="Implementation-Vendor" value="Apache Software Foundation" />
 				</section>
 			</manifest>
+  			<fileset dir="${core.classes.build.dir}" />
+  			<fileset dir="${ant.classes.build.dir}" />
+  	  		<fileset dir="${optional.classes.build.dir}" />
 		</jar>
-  		<jar 	destfile="${artifacts.build.dir}/${final.core.name}"
-				basedir="${classes.build.dir}"
-  				excludes="org/apache/ivy/ant/*">
+  		<jar 	destfile="${artifacts.build.dir}/${final.core.name}">
   			<metainf dir="${basedir}" includes="LICENSE,DISCLAIMER,NOTICE" />
 			<manifest>
 				<attribute name="Build-Version" value="${build.version}"/>
 			</manifest>
+  			<fileset dir="${core.classes.build.dir}" />
+  	  		<fileset dir="${optional.classes.build.dir}" />
 		</jar>
 		<!-- clean generated module properties file -->
-		<delete file="${classes.build.dir}/module.properties"/>
+		<delete file="${core.classes.build.dir}/module.properties"/>
 	</target>
 	
 
@@ -288,7 +316,7 @@
 	
 	<target name="init-tests" depends="init-tests-offline, init-tests-online" />
 	
-	<target name="emma" depends="jar" unless="skip.test" if="ivy.available">
+	<target name="emma" depends="jar" unless="skip.test">
 		<ivy:cachepath organisation="emma" module="emma" revision="2.0.5312" 
 			           inline="true" conf="ant" pathid="emma.classpath"/> 
 		<taskdef resource="emma_ant.properties" classpathref="emma.classpath" />
@@ -296,10 +324,14 @@
 		<property name="coverage.dir" value="${build.dir}/coverage" />
 		<mkdir dir="${coverage.dir}" />
 	    <emma enabled="${emma.enabled}" >
-	      <instr instrpath="${classes.build.dir}"
-	             mode="overwrite"
- 	      	     metadatafile="${coverage.dir}/metadata.emma"
-	      />
+	      <instr mode="overwrite"
+ 	      	     metadatafile="${coverage.dir}/metadata.emma">
+	      	<instrpath>
+				<pathelement location="${core.classes.build.dir}"/>
+				<pathelement location="${ant.classes.build.dir}"/>
+				<pathelement location="${optional.classes.build.dir}"/>
+	      	</instrpath>
+	      </instr>
 	    </emma>
 		<delete file="${coverage.dir}/coverage.emma" />
 		<!-- add emma path to test path, because emma jars need to be available when running 

Added: incubator/ivy/core/trunk/optional.patterns
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/optional.patterns?view=auto&rev=536344
==============================================================================
--- incubator/ivy/core/trunk/optional.patterns (added)
+++ incubator/ivy/core/trunk/optional.patterns Tue May  8 14:50:22 2007
@@ -0,0 +1,13 @@
+#This file defines the sources to compile for ivy-optional.jar
+org/apache/ivy/Main.java
+org/apache/ivy/plugins/matcher/GlobPatternMatcher.java
+org/apache/ivy/plugins/repository/sftp/**/*.java
+org/apache/ivy/plugins/repository/ssh/**/*.java
+org/apache/ivy/plugins/repository/vfs/**/*.java
+org/apache/ivy/plugins/repository/vsftp/**/*.java
+org/apache/ivy/plugins/resolver/AbstractSshBasedResolver.java
+org/apache/ivy/plugins/resolver/SFTPResolver.java
+org/apache/ivy/plugins/resolver/SshResolver.java
+org/apache/ivy/plugins/resolver/VfsResolver.java
+org/apache/ivy/plugins/resolver/VsftpResolver.java
+org/apache/ivy/util/url/HttpClientHandler.java
\ No newline at end of file

Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java?view=diff&rev=536344&r1=536343&r2=536344
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java Tue May  8 14:50:22 2007
@@ -22,6 +22,7 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.reflect.Field;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
@@ -55,7 +56,6 @@
 import org.apache.ivy.plugins.latest.LatestTimeStrategy;
 import org.apache.ivy.plugins.matcher.ExactOrRegexpPatternMatcher;
 import org.apache.ivy.plugins.matcher.ExactPatternMatcher;
-import org.apache.ivy.plugins.matcher.GlobPatternMatcher;
 import org.apache.ivy.plugins.matcher.ModuleIdMatcher;
 import org.apache.ivy.plugins.matcher.PatternMatcher;
 import org.apache.ivy.plugins.matcher.RegexpPatternMatcher;
@@ -179,7 +179,15 @@
         addMatcher(ExactPatternMatcher.INSTANCE);
         addMatcher(RegexpPatternMatcher.INSTANCE);
         addMatcher(ExactOrRegexpPatternMatcher.INSTANCE);
-        addMatcher(GlobPatternMatcher.INSTANCE);
+        
+        try {
+            // GlobPatternMatcher is optional. Only add it when available.
+			Class globClazz = IvySettings.class.getClassLoader().loadClass("org.apache.ivy.plugins.matcher.GlobPatternMatcher");
+			Field instanceField = globClazz.getField("INSTANCE");
+			addMatcher((PatternMatcher) instanceField.get(null));
+		} catch (Exception e) {
+			// ignore: the matcher isn't on the classpath
+		}
         
         addReportOutputter(new XmlReportOutputter());
         addReportOutputter(new LogReportOutputter());

Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/util/url/URLHandlerRegistry.java
URL: http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/util/url/URLHandlerRegistry.java?view=diff&rev=536344&r1=536343&r2=536344
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/util/url/URLHandlerRegistry.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/util/url/URLHandlerRegistry.java Tue May  8 14:50:22 2007
@@ -44,12 +44,19 @@
     public static URLHandler getHttp() {
         try {
             Class.forName("org.apache.commons.httpclient.HttpClient");
+            Class handler = Class.forName("org.apache.ivy.util.url.HttpClientHandler");
             Message.verbose("jakarta commons httpclient detected: using it for http downloading");
-            return new HttpClientHandler(); 
+            return (URLHandler) handler.newInstance(); 
         } catch (ClassNotFoundException e) {
-             Message.verbose("jakarta commons httpclient not found: using jdk url handling");
+            Message.verbose("jakarta commons httpclient not found: using jdk url handling");
             return new BasicURLHandler();
-        }
+        } catch (InstantiationException e) {
+            Message.verbose("couldn't instantiate HttpClientHandler: using jdk url handling");
+            return new BasicURLHandler();
+		} catch (IllegalAccessException e) {
+            Message.verbose("couldn't instantiate HttpClientHandler: using jdk url handling");
+            return new BasicURLHandler();
+		}
     }
 
 }



Re: svn commit: r536344 - in /incubator/ivy/core/trunk: ant.patterns build.properties build.xml optional.patterns src/java/org/apache/ivy/core/settings/IvySettings.java src/java/org/apache/ivy/util/url/URLHandlerRegistry.java

Posted by Xavier Hanin <xa...@gmail.com>.
On 5/8/07, maartenc@apache.org <ma...@apache.org> wrote:
>
> Author: maartenc
> Date: Tue May  8 14:50:22 2007
> New Revision: 536344
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=536344
> Log:
> bootstrap Ivy (instead of downloading a previous version) to resolve our
> own dependencies...
> [...]
>
Modified:
> incubator/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java
> URL:
> http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java?view=diff&rev=536344&r1=536343&r2=536344
>
> ==============================================================================
> ---
> incubator/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java
> (original)
> +++
> incubator/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java
> Tue May  8 14:50:22 2007
> @@ -22,6 +22,7 @@
> import java.io.FileNotFoundException;
> import java.io.IOException;
> import java.io.InputStream;
> +import java.lang.reflect.Field;
> import java.net.MalformedURLException;
> import java.net.URL;
> import java.net.URLClassLoader;
> @@ -55,7 +56,6 @@
> import org.apache.ivy.plugins.latest.LatestTimeStrategy;
> import org.apache.ivy.plugins.matcher.ExactOrRegexpPatternMatcher;
> import org.apache.ivy.plugins.matcher.ExactPatternMatcher;
> -import org.apache.ivy.plugins.matcher.GlobPatternMatcher;
> import org.apache.ivy.plugins.matcher.ModuleIdMatcher;
> import org.apache.ivy.plugins.matcher.PatternMatcher;
> import org.apache.ivy.plugins.matcher.RegexpPatternMatcher;
> @@ -179,7 +179,15 @@
>          addMatcher(ExactPatternMatcher.INSTANCE);
>          addMatcher(RegexpPatternMatcher.INSTANCE);
>          addMatcher(ExactOrRegexpPatternMatcher.INSTANCE);
> -        addMatcher(GlobPatternMatcher.INSTANCE);
> +
> +        try {
> +            // GlobPatternMatcher is optional. Only add it when
> available.
> +                       Class globClazz = IvySettings.class.getClassLoader
> ().loadClass("org.apache.ivy.plugins.matcher.GlobPatternMatcher");
> +                       Field instanceField = globClazz.getField
> ("INSTANCE");
> +                       addMatcher((PatternMatcher) instanceField.get
> (null));
> +               } catch (Exception e) {
> +                       // ignore: the matcher isn't on the classpath
> +               }


Maybe we should add some logging at verbose level to notify if glob pattern
matcher has been loaded or not?

Xavier