Refactor creation of jsinterop and sources JARs for Maven

Uses "zip --copy" and "zip -d --out" instead of expanding the JARs
into a temporary dir and re-jarring them.

Change-Id: I8d9f4c4bb6b1a6c62a16fe9701c68bce2081aaae
diff --git a/maven/lib-gwt.sh b/maven/lib-gwt.sh
index 8e9e00c..7a66847 100644
--- a/maven/lib-gwt.sh
+++ b/maven/lib-gwt.sh
@@ -6,19 +6,11 @@
     echo "WARNING: Errors while deploying files, examine output above."
     echo "Leaving intermediate files at:"
     echo "$RANDOM_DIR"
-    for i in dev user servlet
-    do
-      echo "$jarExpandDir-${i}"
-    done
     find $pomDir -name pom.xml -o -name pom.xml.asc
     echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
   else
     # Clean up
     rm -rf $RANDOM_DIR
-    for i in dev user servlet
-    do
-      rm -rf $jarExpandDir-${i}
-    done
     # Remove POMs & ASCs, leaving only templates
     find $pomDir -name pom.xml -o -name pom.xml.asc -delete
   fi
@@ -81,8 +73,6 @@
   JSINTEROP_JAVADOC_FILE_PATH=$RANDOM_DIR/jsinterop-javadoc.jar
   jar cf $JSINTEROP_JAVADOC_FILE_PATH -C $pomDir/jsinterop README.javadoc
 
-  jarExpandDir=/tmp/tmp-jar-expand-dir-$RANDOM
-
   # Generate POMs with correct version
   for template in `find $pomDir -name pom-template.xml`
   do
@@ -92,6 +82,30 @@
     popd > /dev/null
   done
 
+  # Silently skip Elemental if it doesn't exist
+  gwtLibs='dev user servlet codeserver'
+  if [ -f $GWT_EXTRACT_DIR/gwt-elemental.jar ]; then
+    gwtLibs="${gwtLibs} elemental"
+  fi
+
+  jsinteropLibs='annotations'
+
+  # Create jsinterop libs
+  for i in $jsinteropLibs
+  do
+    echo "Creating jsinterop-${i}.jar and jsinterop-${i}-sources.jar"
+    zip $GWT_EXTRACT_DIR/gwt-user.jar --copy --out $GWT_EXTRACT_DIR/jsinterop-${i}.jar \
+        "jsinterop/${i}/*"
+    zip -d $GWT_EXTRACT_DIR/jsinterop-${i}.jar \
+        "jsinterop/${i}/*.java" "jsinterop/${i}/*.gwt.xml"
+    zip $GWT_EXTRACT_DIR/gwt-user.jar --copy --out $GWT_EXTRACT_DIR/jsinterop-${i}-sources.jar \
+        "jsinterop/${i}/*.java" "jsinterop/${i}/*.gwt.xml"
+    echo "Removing jsinterop/${i} from gwt-user"
+    zip -d $GWT_EXTRACT_DIR/gwt-user.jar "jsinterop/${i}/*"
+    echo "Removing jsinterop/${i} from gwt-servlet"
+    zip -d $GWT_EXTRACT_DIR/gwt-servlet.jar "jsinterop/${i}/*"
+  done
+
   # Remove bundled third-parties from gwt-dev
   echo "Removing ASM classes from gwt-dev"
   zip -d $GWT_EXTRACT_DIR/gwt-dev.jar "org/objectweb/asm/*"
@@ -102,14 +116,6 @@
       "META-INF/services/javax.servlet.*" "META-INF/services/javax.websocket.*" "META-INF/services/org.eclipse.jetty.*" "META-INF/services/org.apache.juli.*" \
       "org/eclipse/jetty/*" "javax/servlet/*" "javax/el/*" "org/apache/jasper/*" "org/apache/el/*" "org/apache/juli/*" "org/apache/tomcat/*"
 
-  # Silently skip Elemental if it doesn't exist
-  gwtLibs='dev user servlet codeserver'
-  if [ -f $GWT_EXTRACT_DIR/gwt-elemental.jar ]; then
-    gwtLibs="${gwtLibs} elemental"
-  fi
-
-  jsinteropLibs='annotations'
-
   for i in $gwtLibs
   do
     CUR_FILE=`ls $GWT_EXTRACT_DIR/gwt-${i}.jar`
@@ -119,43 +125,8 @@
     echo "Removing INDEX.LIST from gwt-${i}"
     zip -d $CUR_FILE META-INF/INDEX.LIST
 
-    SOURCES_FILE=gwt-${i}-sources.jar
-    curExpandDir=$jarExpandDir-${i}
-
-    rm -rf $curExpandDir
-    mkdir -p $curExpandDir
-    unzip -q $CUR_FILE -d $curExpandDir
-    chmod -R ugo+rwx $curExpandDir
-    pushd $curExpandDir > /dev/null
-
-    rm -rf javafilelist
-    find . -name "*.java" > javafilelist
-    if [ -s javafilelist ]; then
-      jar cf $SOURCES_FILE @javafilelist
-    fi
-
-    if [[ "$i" == "user" ]]; then
-      # Create jsinterop jars
-      for i in $jsinteropLibs
-      do
-        # Get rid of JsInterop classes from gwt-user.jar and gwt-user-sources
-        echo "Removing jsinterop/${i} from gwt-user"
-        zip -d $CUR_FILE "jsinterop/${i}/*"
-        echo "Removing jsinterop/${i} from gwt-user-sources"
-        zip -d $SOURCES_FILE "jsinterop/${i}/*"
-
-        rm -rf jsinterop-${i}-classfilelist jsinterop-${i}-javafilelist
-        find "./jsinterop/${i}" -type f -not -name "*.java" -not -name "*.gwt.xml" > jsinterop-${i}-classfilelist
-        if [ -s jsinterop-${i}-classfilelist ]; then
-          jar cf jsinterop-${i}.jar @jsinterop-${i}-classfilelist
-        fi
-        find "./jsinterop/${i}" -name "*.java" -o -name "*.gwt.xml" > jsinterop-${i}-javafilelist
-        if [ -s jsinterop-${i}-javafilelist ]; then
-          jar cf jsinterop-${i}-sources.jar @jsinterop-${i}-javafilelist
-        fi
-      done
-    fi
-    popd > /dev/null
+    SOURCES_FILE=$GWT_EXTRACT_DIR/gwt-${i}-sources.jar
+    zip -q $CUR_FILE --copy --out $SOURCES_FILE "*.java"
   done
 
   # push parent poms
@@ -166,14 +137,14 @@
     CUR_FILE=`ls $GWT_EXTRACT_DIR/gwt-${i}.jar`
     gwtPomFile=$pomDir/gwt/gwt-$i/pom.xml
     SOURCES_FILE=gwt-${i}-sources.jar
-    SOURCES_PATH_FILE=$jarExpandDir-${i}/$SOURCES_FILE
+    SOURCES_PATH_FILE=$GWT_EXTRACT_DIR/$SOURCES_FILE
     # If there are no sources, use gwt-user sources.
     # This is a bit hacky but Sonatype requires a
     # source jar for Central, and lack of sources
     # should only happen for gwt-servlet which is
     # basically a subset of gwt-user.
     if [ ! -f $SOURCES_PATH_FILE ]; then
-      SOURCES_PATH_FILE=$jarExpandDir-user/gwt-user-sources.jar
+      SOURCES_PATH_FILE=$GWT_EXTRACT_DIR/gwt-user-sources.jar
     fi
 
     maven-deploy-file $mavenRepoUrl $mavenRepoId "$CUR_FILE" $gwtPomFile "$JAVADOC_FILE_PATH" "$SOURCES_PATH_FILE" || die
@@ -194,8 +165,8 @@
 
   for i in $jsinteropLibs
   do
-    maven-deploy-file $mavenRepoUrl $mavenRepoId $jarExpandDir-user/jsinterop-${i}.jar $pomDir/jsinterop/${i}/pom.xml \
-        $JSINTEROP_JAVADOC_FILE_PATH $jarExpandDir-user/jsinterop-${i}-sources.jar \
+    maven-deploy-file $mavenRepoUrl $mavenRepoId $GWT_EXTRACT_DIR/jsinterop-${i}.jar $pomDir/jsinterop/${i}/pom.xml \
+        $JSINTEROP_JAVADOC_FILE_PATH $GWT_EXTRACT_DIR/jsinterop-${i}-sources.jar \
          || die
   done