provide jigsaw module - use pre-compiled module-info.class when compiling under Java 8

git-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1880227 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/build.xml b/build.xml
index 48f7efe..3267425 100644
--- a/build.xml
+++ b/build.xml
@@ -17,9 +17,9 @@
      xmlns:mvn="antlib:org.apache.maven.artifact.ant"
      xmlns:if="ant:if" xmlns:unless="ant:unless">
 
-    <property name="build.compiler" value="javac1.8"/>
     <property name="jdk.version.source" value="1.8" description="JDK version of source code"/>
     <property name="jdk.version.class" value="1.8" description="JDK version of generated class files"/>
+    <property name="compile.debug" value="true"/>
 
     <property name="version.base" value="4.0.0"/>
     <property name="version.rc" value=""/>
@@ -33,37 +33,73 @@
         <equals arg1="${ant.java.version}" arg2="1.8"/>
     </condition>
 
-    <scriptdef name="dependency" language="javascript" description="define properties for library dependency">
+    <macrodef name="dependency">
         <attribute name="prefix"/>
         <attribute name="artifact"/>
         <attribute name="usage"/>
-        <attribute name="packaging"/>
-        <attribute name="repo"/>
-        <attribute name="snapshot"/>
-        <attribute name="query"/>
-        <attribute name="target"/>
-        <![CDATA[
-            var parts = attributes.get("artifact").split(/:/);
-            var packaging = attributes.get("packaging") || "jar";
-            var version = attributes.get("snapshot") || parts[2];
-            var repo = attributes.get("repo");
-            if (repo == null) {
-                repo = project.getProperty("repository.m2");
-            }
-            var query = attributes.get("query") || "";
-            var usageDir = attributes.get("usage");
-            usageDir = project.getProperty("basedir")+(usageDir.charAt(0) == '/' ? "" : "/lib/")+usageDir;
-            var jarLoc = usageDir+"/"+(attributes.get("target")||(parts[1]+"-"+parts[2]+"."+packaging));
-            var urlLoc = repo+"/"+parts[0].replace(/\./g,"/")+"/"+parts[1]+"/"+parts[2]+"/"+
-                parts[1]+"-"+(attributes.get("snapshot") || parts[2])+"."+packaging+query;
-            project.setProperty(attributes.get("prefix")+"."+packaging, jarLoc);
-            project.setProperty(attributes.get("prefix")+".url", urlLoc);
-        ]]>
-        <!-- TODO: add library to a queue for downloading ... -->
-    </scriptdef>
+        <attribute name="packaging" default="jar"/>
+        <attribute name="repo" default="${repository.m2}"/>
+        <attribute name="snapshot" default=""/>
+        <attribute name="query" default=""/>
+        <attribute name="target" default=""/>
+        <attribute name="url" default=""/>
+
+        <sequential>
+            <local name="groupDir"/>
+            <loadresource property="groupDir">
+                <string>@{artifact}</string>
+                <filterchain>
+                    <replaceregex pattern="([^:]+).*" replace="\1"/>
+                    <replaceregex pattern="\." replace="/" flags="g"/>
+                </filterchain>
+            </loadresource>
+
+            <local name="artifactId"/>
+            <loadresource property="artifactId">
+                <string>@{artifact}</string>
+                <filterchain>
+                    <replaceregex pattern="[^:]+:([^:]+).*" replace="\1"/>
+                </filterchain>
+            </loadresource>
+
+            <local name="versionDir"/>
+            <loadresource property="versionDir">
+                <string>@{artifact}</string>
+                <filterchain>
+                    <replaceregex pattern="[^:]+:[^:]+:(.*)" replace="\1"/>
+                </filterchain>
+            </loadresource>
+
+            <local name="version"/>
+            <property name="version" value="${versionDir}" if:blank="@{snapshot}"/>
+            <property name="version" value="@{snapshot}"/>
+
+            <local name="usageDir"/>
+            <loadresource property="usageDir">
+                <string>@{usage}</string>
+                <filterchain>
+                    <replaceregex pattern="^([^/])" replace="/lib/\1"/>
+                    <prefixlines prefix="${basedir}"/>
+                </filterchain>
+            </loadresource>
+
+            <local name="jarLoc"/>
+            <property name="jarLoc" value="${usageDir}/@{target}" unless:blank="@{target}"/>
+            <property name="jarLoc" value="${usageDir}/${artifactId}-${version}.@{packaging}"/>
+
+            <local name="urlLoc"/>
+            <property name="urlLoc" value="@{url}" unless:blank="@{url}"/>
+            <property name="urlLoc" value="@{repo}/${groupDir}/${artifactId}/${versionDir}/${artifactId}-${version}.@{packaging}@{query}"/>
+
+            <property name="@{prefix}.@{packaging}" value="${jarLoc}"/>
+            <property name="@{prefix}.url" value="${urlLoc}"/>
+
+            <!-- TODO: add library to a queue for downloading ... -->
+        </sequential>
+    </macrodef>
 
     <!-- dependencies -->
-    <dependency prefix="xml-apis" artifact="xml-apis:xml-apis:1.4.01" usage="main"/>
+    <dependency prefix="xml-apis" artifact="xml-apis:xml-apis:1.4.01" usage="java8"/>
     <dependency prefix="saxon" artifact="net.sf.saxon:Saxon-HE:10.1" usage="main"/>
     <dependency prefix="ant" artifact="org.apache.ant:ant:1.10.8" usage="main"/>
     <dependency prefix="javaparser.core" artifact="com.github.javaparser:javaparser-core:3.15.21" usage="main"/>
@@ -212,13 +248,13 @@
                 </filterchain>
             </copy>
 
-            <javac destdir="@{rscDir}"
-                   debug="true"
+            <javac release="8"
+                   destdir="@{rscDir}"
+                   debug="${compile.debug}"
                    debuglevel="lines,vars,source"
                    includeantruntime="false"
                    target="${jdk.version.class}"
-                   source="${jdk.version.source}"
-            >
+                   source="${jdk.version.source}">
                 <src path="@{srcDir}/org/apache/xmlbeans/metadata/system/@{schemaName}"/>
                 <classpath>
                     <pathelement location="${old.xmlbeans.jar}"/>
@@ -260,13 +296,13 @@
 
         <mkdir dir="build/classes"/>
         <mkdir dir="build/generated-sources"/>
-        <javac destdir="build/classes"
-               debug="true"
+        <javac release="8"
+               destdir="build/classes"
+               debug="${compile.debug}"
                debuglevel="lines,vars,source"
                includeantruntime="false"
                target="${jdk.version.class}"
-               source="${jdk.version.source}"
-        >
+               source="${jdk.version.source}">
             <src refid="sources"/>
             <src path="build/bootstrap/generated-sources"/>
             <classpath>
@@ -307,27 +343,29 @@
         <!-- delete old schema classes -->
         <delete dir="build/classes/org/apache/xmlbeans/impl/xb"/>
 
-        <javac destdir="build/classes"
-               debug="true"
+        <javac release="8"
+               destdir="build/classes"
+               debug="${compile.debug}"
                debuglevel="lines,vars,source"
                includeantruntime="false"
                target="${jdk.version.class}"
-               source="${jdk.version.source}"
-        >
+               source="${jdk.version.source}">
             <src refid="sources"/>
             <classpath path="${saxon.jar}"/>
         </javac>
 
-        <mkdir dir="build/classes/META-INF/versions/9"/>
-
         <javac release="9"
                srcdir="${basedir}/src/main/multimodule/java9"
-               destdir="build/classes/META-INF/versions/9"
+               destdir="${basedir}/src/main/multimodule/java9"
                includeantruntime="false"
+               debug="${compile.debug}"
+               debuglevel="lines,vars,source"
                fork="true"
-               modulepath="lib/main"
                unless:true="${isJava8}">
-            <compilerarg line="--patch-module org.apache.xmlbeans=build/classes"/>
+            <compilerarg line="--patch-module org.apache.xmlbeans=${basedir}/build/classes"/>
+            <modulepath>
+                <pathelement path="lib/main"/>
+            </modulepath>
         </javac>
     </target>
 
@@ -426,14 +464,14 @@
 
 
     <target name="test-compile" depends="process-test-resources" description="Compile test sources and resources">
-        <javac destdir="build/test-classes"
-               debug="true"
+        <javac release="8"
+               destdir="build/test-classes"
+               debug="${compile.debug}"
                debuglevel="lines,vars,source"
                includeantruntime="false"
                classpathref="xmlbeans-test"
                target="${jdk.version.class}"
-               source="${jdk.version.source}"
-        >
+               source="${jdk.version.source}">
             <classpath>
                 <dirset dir="build" includes="test-*/generated-resources"/>
             </classpath>
@@ -446,27 +484,27 @@
         </javac>
 
         <mkdir dir="build/test-syscache/1/classes"/>
-        <javac destdir="build/test-syscache/1/classes"
-               debug="true"
+        <javac release="8"
+               destdir="build/test-syscache/1/classes"
+               debug="${compile.debug}"
                debuglevel="lines,vars,source"
                includeantruntime="false"
                classpathref="xmlbeans-test"
                srcdir="build/test-syscache/1/generated-sources"
                target="${jdk.version.class}"
-               source="${jdk.version.source}"
-        >
+               source="${jdk.version.source}">
             <classpath location="build/test-syscache/1/generated-resources"/>
         </javac>
         <mkdir dir="build/test-syscache/2/classes"/>
-        <javac destdir="build/test-syscache/2/classes"
-               debug="true"
+        <javac release="8"
+               destdir="build/test-syscache/2/classes"
+               debug="${compile.debug}"
                debuglevel="lines,vars,source"
                includeantruntime="false"
                classpathref="xmlbeans-test"
                srcdir="build/test-syscache/2/generated-sources"
                target="${jdk.version.class}"
-               source="${jdk.version.source}"
-        >
+               source="${jdk.version.source}">
             <classpath location="build/test-syscache/2/generated-resources"/>
         </javac>
     </target>
@@ -530,6 +568,7 @@
             <fileset dir="build/classes" excludes="org/apache/xmlbeans/impl/schema/TypeSystemHolder.template"/>
             <fileset dir="." includes="LICENSE.txt,NOTICE.txt"/>
             <fileset dir="build/generated-resources"/>
+            <zipfileset dir="src/main/multimodule/java9" prefix="META-INF/versions/9" excludes="*.java"/>
             <mappedresources>
                 <fileset dir="src/main/resources" excludes="maven"/>
                 <cutdirsmapper dirs="1"/>
diff --git a/src/main/multimodule/java9/module-info.class b/src/main/multimodule/java9/module-info.class
new file mode 100644
index 0000000..058d152
--- /dev/null
+++ b/src/main/multimodule/java9/module-info.class
Binary files differ
diff --git a/src/main/multimodule/java9/module-info.java b/src/main/multimodule/java9/module-info.java
index 132f83d..321bf12 100644
--- a/src/main/multimodule/java9/module-info.java
+++ b/src/main/multimodule/java9/module-info.java
@@ -16,6 +16,7 @@
 ==================================================================== */
 
 module org.apache.xmlbeans {
+    requires java.xml;
     requires jdk.xml.dom;
     requires static ant;
     requires static com.github.javaparser.core;