Revision: 10638
Author: rchan...@google.com
Date: Fri Sep 9 10:31:05 2011
Log: Scripts and configuration to upload GWT bits to Maven repos
- Removed now redundant maven_script.sh
Review at http://gwt-code-reviews.appspot.com/1520810
http://code.google.com/p/google-web-toolkit/source/detail?r=10638
Added:
/trunk/maven
/trunk/maven/README.txt
/trunk/maven/lib-gwt.sh
/trunk/maven/lib-maven-deploy.sh
/trunk/maven/poms
/trunk/maven/poms/gwt
/trunk/maven/poms/gwt/gwt-dev
/trunk/maven/poms/gwt/gwt-dev/pom-template.xml
/trunk/maven/poms/gwt/gwt-servlet
/trunk/maven/poms/gwt/gwt-servlet/pom-template.xml
/trunk/maven/poms/gwt/gwt-user
/trunk/maven/poms/gwt/gwt-user/pom-template.xml
/trunk/maven/poms/gwt/pom-template.xml
/trunk/maven/poms/requestfactory
/trunk/maven/poms/requestfactory/apt
/trunk/maven/poms/requestfactory/apt/pom-template.xml
/trunk/maven/poms/requestfactory/client
/trunk/maven/poms/requestfactory/client/pom-template.xml
/trunk/maven/poms/requestfactory/pom-template.xml
/trunk/maven/poms/requestfactory/server
/trunk/maven/poms/requestfactory/server/pom-template.xml
/trunk/maven/push-gwt.sh
Deleted:
/trunk/tools/scripts
=======================================
--- /dev/null
+++ /trunk/maven/README.txt Fri Sep 9 10:31:05 2011
@@ -0,0 +1,41 @@
+push-gwt.sh packages and deploys GWT to a local or remote Maven
+repository
+
+To build GWT from trunk and deploy to your local repo:
+
+> cd trunk
+> ant clean dist-dev
+> maven/push-gwt.sh
+
+Follow the prompts to set the GWT version # and path to the
+distribution ZIP (it will automatically find it in build/dist if
+you've just built it). By default, the script deploys to your local
+Maven repo.
+
+To deploy to a remote repo:
+
+Set GWT_MAVEN_REPO_URL and GWT_MAVEN_REPO_ID as noted in the
+script. If the remote repo requires a username and password, define
+the repo in your ~/.m2/settings.xml as below and set GWT_MAVEN_REPO_ID
+= server id. In this example, GWT_MAVEN_REPO_ID would be "sonatype".
+
+> cd trunk
+> ant clean dist # must be dist, not dist-dev, to generate Javadocs
+> maven/push-gwt.sh
+
+~/.m2/settings.xml:
+<settings>
+ <localRepository>${env.M2_REPO}</localRepository>
+ <servers>
+ <server>
+ <id>sonatype</id>
+ <username>sonatype_username</username>
+ <password>sonatype_password</password>
+ </server>
+ </servers>
+</settings>
+
+If the remote repo requires jar signing as does Sonatype (Maven
+Central), set up GPG on your local machine then enter the passphrase
+when prompted. When deploying locally, you can enter a passphrase to
+sign the jars for testing or press Enter to skip signing altogether.
=======================================
--- /dev/null
+++ /trunk/maven/lib-gwt.sh Fri Sep 9 10:31:05 2011
@@ -0,0 +1,155 @@
+source lib-maven-deploy.sh
+
+function finishAndCleanup () {
+ if [[ $thereHaveBeenErrors ]]; then
+ echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ 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
+ 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 | xargs rm
+ fi
+
+}
+
+function die () {
+ thereHaveBeenErrors=1
+ if [[ "$continueOnErrors" != "y" ]]; then
+ read -e -p"Error while deploying, ignore errors? (y/N): " -i "N"
continueOnErrors
+ if [[ "$continueOnErrors" != "y" ]]; then
+ finishAndCleanup
+ exit 1
+ fi
+ fi
+}
+
+function warnJavaDoc () {
+ echo "WARNING: Could not deploy JavaDoc for $1. Continuing"
+}
+
+# Appends to COMMIT_MESSAGE
+function maven-gwt() {
+ local gwtMavenVersion=$1
+ shift
+ local gwtSdkArchive=$1
+ shift
+ local gwtCl=$1
+ shift
+ local mavenRepoUrl=$1
+ shift
+ local mavenRepoId=$1
+ shift
+
+ if [[ "$mavenRepoUrl" == "" ]]; then
+ echo "ERROR: Incorrect parameters to maven-gwt"
+ exit 1
+ fi
+
+ if [[ "$mavenRepoId" == "" ]]; then
+ if [[ "`expr match $mavenRepoUrl "file://"`" == 0 ]]; then
+ echo "ERROR: maven-gwt: mavenRepoId is not specified, and the
mavenRepoUrl is not local (does not start with file://)"
+ exit 1
+ fi
+ # set a dummy repo id
+ mavenRepoId=local
+ fi
+
+ set-random-dir
+ echo "Unzipping $gwtSdkArchive to $RANDOM_DIR"
+ unzip -q $gwtSdkArchive -d $RANDOM_DIR || exit 1
+
+ GWT_EXTRACT_DIR=`ls $RANDOM_DIR | tail -n1`
+ GWT_EXTRACT_DIR=$RANDOM_DIR/$GWT_EXTRACT_DIR
+
+ JAVADOC_FILE_PATH=$RANDOM_DIR/gwt-javadoc.jar
+ jar cf $JAVADOC_FILE_PATH -C $GWT_EXTRACT_DIR/doc/javadoc .
+
+ jarExpandDir=/tmp/tmp-jar-expand-dir-$RANDOM
+
+ # Generate POMs with correct version
+ for template in `find $pomDir -name pom-template.xml`
+ do
+ dir=`dirname $template`
+ pushd $dir > /dev/null
+ sed "s|\${gwtVersion}|$gwtMavenVersion|g" pom-template.xml >pom.xml
+ popd > /dev/null
+ done
+
+ # Remove bundled org/json classes from Request Factory jars
+ for i in server client
+ do
+ echo "Removing org.json classes from requestfactory-${i}"
+ zip -d $GWT_EXTRACT_DIR/requestfactory-${i}.jar org/json/*
+ done
+
+ for i in dev user servlet
+ do
+ CUR_FILE=`ls $GWT_EXTRACT_DIR/gwt-${i}.jar`
+
+ # Get rid of the INDEX.LIST file, since it's going to be out of date
+ # once we rename the jar files for Maven
+ 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" -print > javafilelist
+ if [ -s javafilelist ]; then
+ jar cf $SOURCES_FILE @javafilelist
+ fi
+ popd > /dev/null
+ done
+
+ # push parent poms
+ maven-deploy-file $mavenRepoUrl $mavenRepoId $pomDir/gwt/pom.xml
$pomDir/gwt/pom.xml
+
+ for i in dev user servlet
+ do
+ CUR_FILE=`ls $GWT_EXTRACT_DIR/gwt-${i}.jar`
+ gwtPomFile=$pomDir/gwt/gwt-$i/pom.xml
+ maven-deploy-file $mavenRepoUrl $mavenRepoId "$CUR_FILE" $gwtPomFile |
| die
+ maven-deploy-file $mavenRepoUrl $mavenRepoId "$JAVADOC_FILE_PATH"
$gwtPomFile javadoc || warnJavaDoc "gwt-${i}"
+
+ SOURCES_FILE=gwt-${i}-sources.jar
+ curExpandDir=$jarExpandDir-${i}
+ if [ -f $curExpandDir/$SOURCES_FILE ]; then
+ maven-deploy-file $mavenRepoUrl
$mavenRepoId "$curExpandDir/$SOURCES_FILE" $gwtPomFile sources || die
+ fi
+ done
+
+ # HACK: Deploy user sources jar as servlet sources even though it's a
superset of the needed sources
+ maven-deploy-file $mavenRepoUrl
$mavenRepoId "$jarExpandDir-user/gwt-user-sources.jar"
$pomDir/gwt/gwt-servlet/pom.xml sources || die
+
+ # Deploy RequestFactory jars
+ maven-deploy-file $mavenRepoUrl $mavenRepoId
$pomDir/requestfactory/pom.xml $pomDir/requestfactory/pom.xml || die
+
+ for i in client server apt
+ do
+ maven-deploy-file $mavenRepoUrl $mavenRepoId
$GWT_EXTRACT_DIR/requestfactory-${i}.jar
$pomDir/requestfactory/${i}/pom.xml || die
+ maven-deploy-file $mavenRepoUrl $mavenRepoId
$GWT_EXTRACT_DIR/requestfactory-${i}-src.jar
$pomDir/requestfactory/${i}/pom.xml sources || die
+ maven-deploy-file $mavenRepoUrl $mavenRepoId $JAVADOC_FILE_PATH
$pomDir/requestfactory/${i}/pom.xml javadoc ||
warnJavaDoc "requestfactory-${i}"
+ done
+
+ finishAndCleanup
+}
+
=======================================
--- /dev/null
+++ /trunk/maven/lib-maven-deploy.sh Fri Sep 9 10:31:05 2011
@@ -0,0 +1,57 @@
+# Locate Maven exe
+export MAVEN_BIN=${MAVEN_BIN:=`which mvn`}
+if [ -z "$MAVEN_BIN" ]; then
+ echo "mvn not found. Add mvn to PATH or set MAVEN_BIN."
+ exit
+fi
+echo Using $MAVEN_BIN
+
+function set-random-dir() {
+ export RANDOM_DIR=/tmp/random-dir-$RANDOM$RANDOM$RANDOM$RANDOM
+ rm -rf $RANDOM_DIR
+ mkdir -p $RANDOM_DIR
+}
+
+function maven-deploy-file() {
+ local mavenRepoUrl=$1
+ shift
+ local mavenRepoId=$1
+ shift
+ local curFile=$1
+ shift
+ local pomFile=$1
+ shift
+ local classifier=$1
+ shift
+
+ if [[ "$curFile" == "" ]]; then
+ echo "ERROR: Unable to deploy $artifactId in repo! Cannot find
corresponding file!"
+ return 1
+ fi
+
+ local cmd="";
+ if [[ "$gpgPassphrase" != "" ]]; then
+ cmd="$MAVEN_BIN \
+ gpg:sign-and-deploy-file \
+ -Dfile=$curFile \
+ -Durl=$mavenRepoUrl \
+ -DrepositoryId=$mavenRepoId \
+ -DpomFile=$pomFile \
+ -Dclassifier=$classifier \
+ -DuniqueVersion=false \
+ -Dgpg.passphrase=\"$gpgPassphrase\""
+ else
+ echo "GPG passphrase not specified; will attempt to deploy files
without signing"
+ cmd="$MAVEN_BIN \
+ deploy:deploy-file \
+ -Dfile=$curFile \
+ -Durl=$mavenRepoUrl \
+ -DrepositoryId=$mavenRepoId \
+ -DpomFile=$pomFile \
+ -Dclassifier=$classifier \
+ -DuniqueVersion=false"
+ fi
+ echo $cmd
+ eval $cmd
+}
+
=======================================
--- /dev/null
+++ /trunk/maven/poms/gwt/gwt-dev/pom-template.xml Fri Sep 9 10:31:05 2011
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>com.google.gwt</groupId>
+ <artifactId>gwt</artifactId>
+ <version>${gwtVersion}</version>
+ </parent>
+ <groupId>com.google.gwt</groupId>
+ <artifactId>gwt-dev</artifactId>
+ <packaging>jar</packaging>
+ <version>${gwtVersion}</version>
+</project>
=======================================
--- /dev/null
+++ /trunk/maven/poms/gwt/gwt-servlet/pom-template.xml Fri Sep 9 10:31:05
2011
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>com.google.gwt</groupId>
+ <artifactId>gwt</artifactId>
+ <version>${gwtVersion}</version>
+ </parent>
+ <groupId>com.google.gwt</groupId>
+ <artifactId>gwt-servlet</artifactId>
+ <packaging>jar</packaging>
+ <version>${gwtVersion}</version>
+ <!-- Declare these in your project POM if using RequestFactory -->
+ <dependencies>
+ <dependency>
+ <groupId>javax.validation</groupId>
+ <artifactId>validation-api</artifactId>
+ <version>1.0.0.GA</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.json</groupId>
+ <artifactId>json</artifactId>
+ <version>20090211</version>
+ <optional>true</optional>
+ </dependency>
+ </dependencies>
+</project>
=======================================
--- /dev/null
+++ /trunk/maven/poms/gwt/gwt-user/pom-template.xml Fri Sep 9 10:31:05 2011
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>com.google.gwt</groupId>
+ <artifactId>gwt</artifactId>
+ <version>${gwtVersion}</version>
+ </parent>
+ <groupId>com.google.gwt</groupId>
+ <artifactId>gwt-user</artifactId>
+ <packaging>jar</packaging>
+ <version>${gwtVersion}</version>
+ <dependencies>
+ <dependency>
+ <groupId>javax.validation</groupId>
+ <artifactId>validation-api</artifactId>
+ <version>1.0.0.GA</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.validation</groupId>
+ <artifactId>validation-api</artifactId>
+ <version>1.0.0.GA</version>
+ <classifier>sources</classifier>
+ </dependency>
+ </dependencies>
+</project>
=======================================
--- /dev/null
+++ /trunk/maven/poms/gwt/pom-template.xml Fri Sep 9 10:31:05 2011
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <groupId>org.sonatype.oss</groupId>
+ <artifactId>oss-parent</artifactId>
+ <version>4</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>com.google.gwt</groupId>
+ <artifactId>gwt</artifactId>
+ <packaging>pom</packaging>
+ <name>Google Web Toolkit</name>
+ <url>http://code.google.com/webtoolkit/</url>
+ <version>${gwtVersion}</version>
+ <licenses>
+ <license>
+ <name>Google Web Toolkit Terms</name>
+ <url>http://code.google.com/webtoolkit/terms.html</url>
+ </license>
+ </licenses>
+</project>
=======================================
--- /dev/null
+++ /trunk/maven/poms/requestfactory/apt/pom-template.xml Fri Sep 9
10:31:05 2011
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>com.google.web.bindery</groupId>
+ <artifactId>requestfactory</artifactId>
+ <version>${gwtVersion}</version>
+ </parent>
+ <groupId>com.google.web.bindery</groupId>
+ <artifactId>requestfactory-apt</artifactId>
+ <packaging>jar</packaging>
+ <version>${gwtVersion}</version>
+</project>
=======================================
--- /dev/null
+++ /trunk/maven/poms/requestfactory/client/pom-template.xml Fri Sep 9
10:31:05 2011
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>com.google.web.bindery</groupId>
+ <artifactId>requestfactory</artifactId>
+ <version>${gwtVersion}</version>
+ </parent>
+ <groupId>com.google.web.bindery</groupId>
+ <artifactId>requestfactory-client</artifactId>
+ <packaging>jar</packaging>
+ <version>${gwtVersion}</version>
+ <dependencies>
+ <dependency>
+ <groupId>javax.validation</groupId>
+ <artifactId>validation-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.json</groupId>
+ <artifactId>json</artifactId>
+ </dependency>
+ </dependencies>
+</project>
=======================================
--- /dev/null
+++ /trunk/maven/poms/requestfactory/pom-template.xml Fri Sep 9 10:31:05
2011
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <groupId>org.sonatype.oss</groupId>
+ <artifactId>oss-parent</artifactId>
+ <version>4</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>com.google.web.bindery</groupId>
+ <artifactId>requestfactory</artifactId>
+ <packaging>pom</packaging>
+ <name>RequestFactory</name>
+
<url>http://code.google.com/webtoolkit/doc/latest/DevGuideRequestFactory.html</url>
+ <version>${gwtVersion}</version>
+ <licenses>
+ <license>
+ <name>Google Web Toolkit Terms</name>
+ <url>http://code.google.com/webtoolkit/terms.html</url>
+ </license>
+ </licenses>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>javax.validation</groupId>
+ <artifactId>validation-api</artifactId>
+ <version>1.0.0.GA</version>
+ </dependency>
+ <dependency>
+ <groupId>org.json</groupId>
+ <artifactId>json</artifactId>
+ <version>20090211</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project>
=======================================
--- /dev/null
+++ /trunk/maven/poms/requestfactory/server/pom-template.xml Fri Sep 9
10:31:05 2011
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>com.google.web.bindery</groupId>
+ <artifactId>requestfactory</artifactId>
+ <version>${gwtVersion}</version>
+ </parent>
+ <groupId>com.google.web.bindery</groupId>
+ <artifactId>requestfactory-server</artifactId>
+ <packaging>jar</packaging>
+ <version>${gwtVersion}</version>
+ <dependencies>
+ <dependency>
+ <groupId>javax.validation</groupId>
+ <artifactId>validation-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.json</groupId>
+ <artifactId>json</artifactId>
+ </dependency>
+ </dependencies>
+</project>
=======================================
--- /dev/null
+++ /trunk/maven/push-gwt.sh Fri Sep 9 10:31:05 2011
@@ -0,0 +1,49 @@
+#!/bin/bash
+#
+# Pushes GWT artifacts to a local (the default) or remote maven repository
+# To push remote, set 2 env variables: GWT_MAVEN_REPO_URL and
GWT_MAVEN_REPO_ID
+#
+# GWT_MAVEN_REPO_ID = a server id in your .m2/settings.xml with remote
repo username and password
+#
+# Sonatype staging repo (promotes to Maven Central)
+#
GWT_MAVEN_REPO_URL=https://oss.sonatype.org/service/local/staging/deploy/maven2/
+#
+# Sonatype Google SNAPSHOTs repo (can only deploy SNAPSHOTs here, and they
are immediately public)
+#
GWT_MAVEN_REPO_URL=https://oss.sonatype.org/content/repositories/google-snapshots/
+
+pushd $(dirname $0) >/dev/null 2>&1
+
+export pomDir=./poms
+
+source lib-gwt.sh
+
+# use GWT_MAVEN_REPO_URL if set else M2_REPO else default location for
local repo
+localRepoUrl=${M2_REPO:="$HOME/.m2/repository"}
+localRepoUrl="file://$localRepoUrl"
+repoUrl=${GWT_MAVEN_REPO_URL:=$localRepoUrl}
+# repo id is ignored by local repo
+repoId=${GWT_MAVEN_REPO_ID:=none}
+
+# prompt for info
+read -e -p"GWT version for Maven (ex: 2.4.0): " -i "$GWT_VERSION"
gwtVersion
+gwtTrunk=$(dirname $(pwd))
+if [ -f ${gwtTrunk}/build/dist/gwt-*.zip ]; then
+ gwtPath=$(ls ${gwtTrunk}/build/dist/gwt-*.zip | head -n1)
+fi
+read -e -p"Path to GWT distro zip: " -i "$gwtPath" gwtPath
+if [[ "$gwtPath" == "" || ! -f $gwtPath ]]; then
+ echo "ERROR: Cannot find file at \"$gwtPath\""
+ exit 1
+fi
+read -e -p"Deploy to repo URL: " -i "$repoUrl" repoUrl
+read -p"GPG passphrase for jar signing (may skip for local deployment): "
gpgPassphrase
+
+# GWT from distribution ZIP
+gwtCl=$(ls -lrt $gwtPath | tail -n2 | head -n1 | sed
-r 's/.*r([0-9]+).zip.*/\1/')
+maven-gwt "$gwtVersion" \
+ "$gwtPath" \
+ "$gwtCl" \
+ "$repoUrl" \
+ "$repoId"
+
+popd >/dev/null 2>&1
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors