diff --git a/.gitignore b/.gitignore
index e0d44a067c555cb29a4351320c4ff670d861807e..b66c620ce5a618bf4ff20e98d532804a3f3321ae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 .gradle
 build
 
+/bin
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0538e08e2bb274c33f1bfb7b607e50f2958293cd..94bb98737baee788c9483c22e18a450cf33f10bb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,7 +11,7 @@ project(rosjava_bootstrap)
 
 find_package(catkin REQUIRED rosjava_build_tools)
 
-catkin_rosjava_setup(publishMavenJavaPublicationToMavenRepository)
+catkin_rosjava_setup(publishMavenJavaPublicationToMavenRepository installApp)
 
 catkin_package()
 
diff --git a/build.gradle b/build.gradle
index a4d3ba13926351497bf695385dc7822175e7e7b1..4bf3d5a6500bab603995e3be248796a98ef90dbd 100644
--- a/build.gradle
+++ b/build.gradle
@@ -18,20 +18,12 @@ task wrapper(type: Wrapper) {
   gradleVersion = '1.11'
 }
 
-project.ext {
-  /* the ros plugin defines this, but since we're building the plugin... */
-  rosMavenDeploymentRepository = "$System.env.ROS_MAVEN_DEPLOYMENT_REPOSITORY"
-  rosMavenPath = "$System.env.ROS_MAVEN_PATH".split(':')
-  rosMavenRepository = "$System.env.ROS_MAVEN_REPOSITORY"
-}
-
 allprojects {
-  group='org.ros.rosjava_bootstrap'
-  version = '0.1.21'
+  group="org.ros.rosjava_bootstrap"
+  version = "0.2.0"
 }
 
 subprojects {
-  /* Have to manually do this below since our gradle plugin is our sub project */
   apply plugin: 'java'
   apply plugin: 'maven'
   apply plugin: 'maven-publish'
@@ -39,14 +31,21 @@ subprojects {
   sourceCompatibility = 1.6
   targetCompatibility = 1.6
 
+  // These external repositories are copied from bootstrap.gradle.
   repositories {
-    mavenLocal()
+    mavenCentral()
     maven {
-      url project.rosMavenRepository
+      url "http://repository.springsource.com/maven/bundles/release"
+    }
+    maven {
+      url "http://repository.springsource.com/maven/bundles/external"
     }
-    mavenCentral()
   }
-  if ( project.rosMavenDeploymentRepository != 'null' && project.rosMavenDeploymentRepository != '' ) {
+
+  // Configuration of the deployment repository is copied from the RosPlugin.
+  String mavenDeploymentRepository = System.getenv("ROS_MAVEN_DEPLOYMENT_REPOSITORY")
+  if (mavenDeploymentRepository != null &&
+      mavenDeploymentRepository != "") {
     publishing {
       publications {
         mavenJava(MavenPublication) {
@@ -55,11 +54,13 @@ subprojects {
       }
       repositories {
         maven {
-           url 'file://' + project.rosMavenDeploymentRepository
+           url 'file://' + mavenDeploymentRepository
         }
       }
     }
+  } else {
+    logger.warn("ROS_MAVEN_DEPLOYMENT_REPOSITORY is not set. Have you sourced setup.bash?")
   }
 }
 
-defaultTasks 'install'
+defaultTasks 'publishMavenJavaPublicationToMavenRepository', 'installApp'
diff --git a/buildscript.gradle b/buildscript.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..64c37f9a9f24ab195a84c24671de3816a1e4b148
--- /dev/null
+++ b/buildscript.gradle
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2014 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+rootProject.buildscript {
+  String rosMavenPath = System.getenv("ROS_MAVEN_PATH")
+  String rosMavenRepository = System.getenv("ROS_MAVEN_REPOSITORY")
+
+  repositories {
+    if (rosMavenPath != null) {
+      rosMavenPath.tokenize(":").each { path ->
+        maven {
+          // We can't use uri() here because we aren't running inside something
+          // that implements the Script interface.
+          url "file:${path}"
+        }
+      }
+    }
+    maven {
+      url "http://repository.springsource.com/maven/bundles/release"
+    }
+    maven {
+      url "http://repository.springsource.com/maven/bundles/external"
+    }
+    if (rosMavenRepository != null) {
+      maven {
+        url rosMavenRepository
+      }
+    } else {
+      maven {
+        url "https://github.com/rosjava/rosjava_mvn_repo/raw/master"
+      }
+    }
+    mavenCentral()
+  }
+
+  dependencies {
+    classpath "org.ros.rosjava_bootstrap:gradle_plugins:[0.2,0.3)"
+  }
+}
\ No newline at end of file
diff --git a/message_generation/build.gradle b/message_generation/build.gradle
index e844fcd34224765c070ca18bbf6fee0cb9051d6c..1de91f4f26dcf945a83a1a386f036fbf312475bf 100644
--- a/message_generation/build.gradle
+++ b/message_generation/build.gradle
@@ -15,13 +15,13 @@
  */
 
 dependencies {
-  compile 'io.netty:netty:3.5.2.Final'
-  compile 'com.google.guava:guava:12.0'
-  compile 'org.apache.commons:com.springsource.org.apache.commons.codec:1.3.0'
-  compile 'org.apache.commons:com.springsource.org.apache.commons.io:1.4.0'
-  compile 'commons-pool:commons-pool:1.6'
-  compile 'org.apache.commons:com.springsource.org.apache.commons.lang:2.4.0'
-  compile project(':gradle_plugins')
+  compile "com.google.guava:guava:12.0"
+  compile "commons-pool:commons-pool:1.6"
+  compile "io.netty:netty:3.5.2.Final"
+  compile "org.apache.commons:com.springsource.org.apache.commons.codec:1.3.0"
+  compile "org.apache.commons:com.springsource.org.apache.commons.io:1.4.0"
+  compile "org.apache.commons:com.springsource.org.apache.commons.lang:2.4.0"
+  testCompile "junit:junit:4.8.2"
 }
 
 apply plugin: "application"
diff --git a/package.xml b/package.xml
index 93fa1082c05927dcfad2c63991f118b5d240f092..d1f2e805c244ff44b0b3345cb4d34e02321c9545 100644
--- a/package.xml
+++ b/package.xml
@@ -1,14 +1,14 @@
 <?xml version="1.0"?>
 <package>
   <name>rosjava_bootstrap</name>
-  <version>0.1.21</version>
+  <version>0.2.0</version>
   <description>
     Bootstrap utilities for rosjava builds.
   </description>
   <url>http://ros.org/wiki/rosjava_bootstrap</url>
   <maintainer email="d.stonier@gmail.com">Daniel Stonier</maintainer>
-  <author email="d.stonier@gmail.com">Daniel Stonier</author>
-  <author email="damonkohler@google.com">Damon Kohler</author>
+  <author>Daniel Stonier</author>
+  <author>Damon Kohler</author>
   <license>Apache 2.0</license>
   <buildtool_depend>catkin</buildtool_depend>
   <build_depend>rosjava_build_tools</build_depend>
diff --git a/settings.gradle b/settings.gradle
index aabc522ae0c3733e0db1fcd2338aa148b46bdd0c..b85c37b8ba5d45b695d794928da123e370701475 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -14,7 +14,5 @@
  * the License.
  */
 
-/* rootProject.name = 'catkin' */
-
 include 'gradle_plugins'
 include 'message_generation'