The following is a step-by-step procedure for releasing a new version of Google-Gson.
- Go through all open bugs and identify which will be fixed in this release. Mark all others with an appropriate release tag. Identify duplicates, and close the bugs that will never be fixed. Fix all bugs for the release, and mark them fixed.
- Edit pom.xml and update the versions listed for Export-Package to the target version. Also add any new Java packages that have been introduced in Gson.
- Ensure all changelists are code-reviewed and have +1
- Ensure that your ~/.m2/settings.xml is configured properly (see steps below)
- cd gson. Ensure there are no open files and all changes are committed.
- Run mvn release:clean
- Do a dry run: mvn release:prepare -DdryRun=true
- Start the release: mvn -Dusername=<your-google-username> -Dpassword=<your-google-code-password> release:prepare
- Answer questions: usually the defaults are fine.
- This will do a full build, change version from -SNAPSHOT to the released version, commit and create the tags. It will then change the version to -SNAPSHOT for the next release.
- To release a specific version, use:
mvn release:perform -DconnectionUrl=scm:svn:
- Ensure you have defined sonatype-nexus-staging in your maven settings.xml and run mvn -s /home/<username>/.m2/settings.xml -Dusername=<your-google-username> -Dpassword=<your-google-code-password> release:perform
- Log in to Nexus repository manager at Sonatype and close the staging repository for Gson. If you run into an error regarding missing signatures, you need to manually upload the artifacts using mvn gpg:sign-and-deploy-file for Gson binary, source and javadoc jars.
Close the Gson repository. Download and sanity check all downloads. Do not skip this step! Once you release the staging repository, there is no going back. It will get synced with maven central and you will not be able to update or delete anything. Your only recourse will be to release a new version of Gson and hope that no one uses the old one.Release the staging repository for Gson. Gson will now get synced to Maven central with-in the next hour. For issues consult Sonatype Guide.
cp -r ~/.m2/repository/com/google/code/gson/gson/1.7.2 /tmp; cd /tmp/1.7.2
mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=gson-1.7.2.pom -Dfile=gson-1.7.2-javadoc.jar -Dclassifier=javadoc
mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=gson-1.7.2.pom -Dfile=gson-1.7.2-sources.jar -Dclassifier=sources
mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=gson-1.7.2.pom -Dfile=gson-1.7.2.jar
We also need to do a version of the following commands: After locally changing the version in pom.xml to the released version.
- Perform the following Maven commands, in order:
Navigate to target/dist and perform a sanity check on the zip bundle:
mvn package source:jar javadoc:jar assembly:assembly
Upload the zip bundle to the GSON downloads page (label this upload as "Featured")
- unzip zip file
- jar tvf on the jar files and verify the proper files are in the jars
Deprecate old Gson version (click on version label and set the "Featured" label to "Deprecated")
Create a jar for the stream classes:
Test the stream jar using vogar.
- jar cvfM target/google-gson-stream-1.6.jar -C target/classes/ com/google/gson/stream/
Upload the stream jar to the GSON downloads page without any labelCopy generated JavaDocs from
vogar --mode jvm --classpath target/google-gson-stream-1.6.jar src/test/java/com/google/gson/stream/*
Configure your SVN client to automatically assign MIME types for Javadocs. Instructions from Eric Burke's Blog.
- cp -r target/apidocs/* docs/javadocs
Commit the JavaDoc changes into the repository
- Or if you are not satisfied with the above solution like me....you can always do the following:
- find docs -name "*.html" | xargs svn propset svn:mime-type text/html
- find docs -name "*.gif" | xargs svn propset svn:mime-type image/gif
Update the version in the Using Gson with Maven2 pageUpdate Gson Roadmap to move the release down under the "Released section". Also, look at all bugs that were fixed and add a few lines describing what changed in the release.
Create a post on the Gson Discussion ForumUpdate the release version in Wikipedia and update the current "stable" release.
Configuring a machine for deployment to Sonatype Repository
(Borrowed heavily from Doclava release process
- Install/Configure GPG following this guide
- Create encrypted passwords
- Create ~/.m2/settings.xml similar to as described in Doclava release process
- Now for deploying a snapshot repository, use mvn deploy
Getting Maven Publishing Privileges
2. Ask one of the existing members of the repository to create a JIRA ticket (Step 3 of above document) to add you to the publisher list.
Diffing Releases with jdiff
Download the previous release from the GSON downloads page. unzip it. cd to the google-gson-xxx directory and run jar xvf gson-xxx-sources.jar
Create a build.xml file to execute jdiff from ant. Set the paths to jdiff home, version numbers, and the paths to the old and new versions of GSON:
<?xml version="1.0" encoding="UTF-8"?>
<project name="jdiff" default="jdiff_report" basedir=".">
<target name="jdiff_report" depends="">
<property name="JDIFF_HOME" value="
<jdiff destdir="target/myreport" verbose="on" stats="on" docchanges="on">
<!-- This is the location of your old source files -->
" includes="com/**" />
" includes="com/**" />
Running Benchmarks or Tests on Android
Put adb on your $PATH and run:vogar --benchmark --classpath gson.jar path/to/Benchmark.java
For example, here is how to run the CollectionsDeserializationBenchmark:
$VOGAR_HOME/bin/vogar --benchmark --sourcepath ../gson/src/main/java/ src/main/java/com/google/gson/metrics/CollectionsDeserializationBenchmark.java -- --vm "app_process -Xgc:noconcurrent,app_process"