From db9220a41022be4f05a15431cff5a8c1a8f04b03 Mon Sep 17 00:00:00 2001
From: Don Brutzman <brutzman@nps.edu>
Date: Sun, 4 Jul 2021 16:45:03 -0700
Subject: [PATCH] fix jar creation

---
 build.xml | 100 +++++++++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 87 insertions(+), 13 deletions(-)

diff --git a/build.xml b/build.xml
index 2f6464cf23..e5e4a28138 100644
--- a/build.xml
+++ b/build.xml
@@ -221,16 +221,80 @@
         <echo message="Implementation-Version = ${timestamp}"/>
         <echo message="Implementation-Vendor  = ${Implementation-Vendor}"/>
         
-        <antcall target="jar-classes"/>
-        <antcall target="jar-source"/>
-        <antcall target="jar-javadoc"/>
+        <antcall target="jar-pdus-classes"/>
+        <antcall target="jar-pdus-source"/>
+        <antcall target="jar-pdus-javadoc"/>
+        <antcall target="jar-full"/>
     </target>
-    
-    <target name="jar-javadoc" description="full set of javadoc"> <!-- avoid performing multiple times: depends="javadoc" -->
+
+    <target name="jar-full" description="full set of everything, pdus and enumerations">
+        <delete  file="dist/open-dis7-full.jar"/>
+        <jar destfile="dist/open-dis7-full.jar"
+               update="true"
+              basedir="."
+            zip64Mode="always">
+            <!-- zip64Mode https://stackoverflow.com/questions/39524481/error-creating-jar-archive-contains-more-than-65535-entries/ -->
+            <!-- https://stackoverflow.com/questions/515428/clean-way-to-combine-multiple-jars-preferably-using-ant -->
+             <zipfileset src="dist/open-dis7-enumerations-classes.jar"/>
+        <!-- <zipfileset src="dist/open-dis7-enumerations-javadoc.jar"/> duplicative -->
+             <zipfileset src="dist/open-dis7-enumerations-source.jar"/>
+             <zipfileset src="dist/open-dis7-pdus-classes.jar"/>
+             <zipfileset src="dist/open-dis7-pdus-javadoc.jar"/>
+             <zipfileset src="dist/open-dis7-pdus-source.jar"/>
+
+            <!--
+            <fileset dir="build/" defaultexcludes="yes">
+                <include name="classes/**/*"/>
+                <exclude name="test/*"/>
+            </fileset>
+            <fileset dir="dist/" defaultexcludes="yes">
+                <include name="javadoc/*"/>
+                <include name="javadoc/**/*"/>
+                <exclude name="test/*"/>
+            </fileset>
+            <fileset dir="src/" defaultexcludes="yes">
+                <include name="**/*"/>
+                <exclude name="test/*"/>
+            </fileset>
+            <fileset dir="src-generated/." defaultexcludes="yes">
+                <include name="**/*"/>
+                <exclude name="test/*"/>
+            </fileset>
+            -->
+            <!-- https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html -->
+            <manifest>
+                <attribute name="description"            value="Full set of files for ${manifest.name}"/>
+                <attribute name="Built-By"               value="${Built-By}"/>
+                <attribute name="Specification-Title"    value="${Specification-Title}"/>
+                <attribute name="Specification-Version"  value="${Specification-Version}"/>
+                <attribute name="Specification-Vendor"   value="${Specification-Vendor}"/>
+                <attribute name="Implementation-Title"   value="${Implementation-Title}"/>
+                <attribute name="Implementation-Version" value="${Implementation-Version}"/>
+                <attribute name="Implementation-Vendor"  value="${Implementation-Vendor}"/>
+
+                <section name="**/edu/nps/moves/**">
+                    <attribute name="Sealed" value="true"/>
+                </section>
+            </manifest>
+        </jar>
+    </target>
+
+    <target name="jar-pdus-javadoc" description="full set of javadoc"> <!-- avoid performing multiple times: depends="javadoc" -->
         <echo message="(note that generated javadoc subdirectory is found within dist subdirectory)"/>
+        <delete  file="dist/open-dis7-pdus-javadoc.jar"/>
         <jar destfile="dist/open-dis7-pdus-javadoc.jar"
                update="true"
-              basedir="dist/javadoc">
+              basedir="dist"
+            zip64Mode="always">
+            <fileset dir="dist" defaultexcludes="yes">
+                <include name="javadoc/edu/nps/moves/dis7/pdus/*"/>
+                <include name="javadoc/edu/nps/moves/dis7/utilities/**/*"/>
+                <include name="javadoc/edu/nps/moves/spatial/*"/>
+                <exclude name="javadoc/edu/nps/moves/dis7/entities/*"/>
+                <exclude name="javadoc/edu/nps/moves/dis7/enumerations/*"/>
+                <exclude name="javadoc/edu/nps/moves/dis7/jammers/*"/>
+                <exclude name="javadoc/edu/nps/moves/dis7/objectTypes/*"/>
+            </fileset>
             <!-- https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html -->
             <manifest>
                 <attribute name="description"            value="Javadoc files for ${manifest.name}"/>
@@ -249,8 +313,10 @@
         </jar>
     </target>
     
-    <target name="jar-source">
+    <target name="jar-pdus-source">
+        <delete  file="dist/open-dis7-pdus-source.jar"/>
         <jar destfile="dist/open-dis7-pdus-source.jar"
+              basedir="src"
              includes="edu/nps/moves/dis7/**"
              excludes=".keep"
                update="true"
@@ -288,18 +354,22 @@
         </jar>        
     </target>
     
-    <target name="jar-classes" depends="compile" description="merges all dis7 subpackage classes except for enumerations">
-        <!--   -->
+    <target name="jar-pdus-classes" depends="compile" description="merges all dis7 subpackage classes except for enumerations">
+        <delete  file="dist/open-dis7-pdus-classes.jar"/>
         <jar destfile="dist/open-dis7-pdus-classes.jar"
-             basedir="."
+             basedir="build"
              includes="edu/nps/moves/**"
              excludes=".keep"
                update="true"
             zip64Mode="always">
             <fileset dir="build/classes" defaultexcludes="yes">
-                <include name="edu/nps/moves/dis7/pdus/*.class"/>
-                <include name="edu/nps/moves/dis7/utilities/**/*.class"/>
-                <include name="edu/nps/moves/spatial/*.class"/>
+                <include name="**/edu/nps/moves/dis7/pdus/*"/>
+                <include name="**/edu/nps/moves/dis7/utilities/**/*"/>
+                <include name="**/edu/nps/moves/spatial/*"/>
+                <exclude name="**/edu/nps/moves/dis7/entities/*"/>
+                <exclude name="**/edu/nps/moves/dis7/enumerations/*"/>
+                <exclude name="**/edu/nps/moves/dis7/jammers/*"/>
+                <exclude name="**/edu/nps/moves/dis7/objectTypes/*"/>
             </fileset>
             <!-- https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html -->
             <manifest>
@@ -360,6 +430,10 @@
             </fileset>
             <report format="frames" todir="${build.test.results.dir}/html"/>
         </junitreport>
+        <!--
+        <echo message="*** ant sleep 2 seconds..."/>
+        <sleep seconds="2" description="hoping to avoid intermittent test failures due to  network timeout"/>
+        -->
     </target>
     <target depends="compile-test-single,-pre-test-run-single"
             description="Debug single unit test."
-- 
GitLab