diff --git a/cmake/rosjava.cmake.em b/cmake/rosjava.cmake.em
index 73ac7cacb3c532da55d380d07cbec228a44fa7b9..fd52b5ee5bc1a94ceaa9e29c38382831907c9f32 100644
--- a/cmake/rosjava.cmake.em
+++ b/cmake/rosjava.cmake.em
@@ -2,6 +2,8 @@
 # Utilities
 ##############################################################################
 
+set(CATKIN_GLOBAL_MAVEN_DESTINATION ${CATKIN_GLOBAL_SHARE_DESTINATION}/maven CACHE PATH "path to which maven artifacts are deployed in your workspace")
+
 # Scans down directories till it finds the gradle wrapper.
 # It sets the following variables
 # - ${PROJECT_NAME}_gradle_BINARY
@@ -35,22 +37,35 @@ macro(find_gradle_repo_root)
      get_filename_component(${PROJECT_NAME}_gradle_ROOT ${${PROJECT_NAME}_gradle_SETTINGS} PATH)
 endmacro()
 
+# Sets environment variables that are used by gradle to customise a build.
+# This is better than modifying a gradle script - gradle should be able
+# to be called alone without cmake intervention.
+macro(_rosjava_env)
+    set(ROSJAVA_ENV $ENV{ROS_MAVEN_DEPLOYMENT_PATH})
+    if(NOT ROSJAVA_ENV)
+      set(ROSJAVA_ENV "ROS_MAVEN_DEPLOYMENT_PATH=${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_MAVEN_DESTINATION}")
+    endif()
+endmacro()
+
 ##############################################################################
 # RosJava Package
 ##############################################################################
 # Calls the gradle wrapper to compile just the package
 # that it is called in with install and installApp targets.
 macro(catkin_rosjava_setup)
+    _rosjava_env()
     find_gradle()
     if( ${ARGC} EQUAL 0 )
-      set(gradle_tasks "install;installApp")
+      # Note : COMMAND is a list of variables, so these need to be a list, not a single string
+      set(gradle_tasks "install;installApp;uploadArchives")
     else()
-      string(REPLACE ";" " " gradle_tasks "${ARGV}")
+      set(gradle_tasks ${ARGV})
     endif()
     add_custom_target(gradle-${PROJECT_NAME}
         ALL
-        COMMAND ${CATKIN_ENV} ${${PROJECT_NAME}_gradle_BINARY} ${gradle_tasks} 
+        COMMAND ${ROSJAVA_ENV} ${CATKIN_ENV} ${${PROJECT_NAME}_gradle_BINARY} ${gradle_tasks} 
         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+        VERBATIM
     )
     catkin_package_xml()
     foreach(depends in ${${PROJECT_NAME}_BUILD_DEPENDS})
@@ -76,6 +91,7 @@ endmacro()
 # It checks the build type and determines whether it should run
 # assembleDebug or assembleRelease
 macro(catkin_android_setup)
+    _rosjava_env()
     find_gradle()
     if( ${ARGC} EQUAL 0 )
       if(CMAKE_BUILD_TYPE STREQUAL "Release")
@@ -88,8 +104,9 @@ macro(catkin_android_setup)
     endif()
     add_custom_target(gradle-${PROJECT_NAME}
         ALL
-        COMMAND ${CATKIN_ENV} ${${PROJECT_NAME}_gradle_BINARY} ${gradle_tasks}
+        COMMAND ${ROSJAVA_ENV} ${CATKIN_ENV} ${${PROJECT_NAME}_gradle_BINARY} ${gradle_tasks}
         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+        VERBATIM
     )
     catkin_package_xml()
     foreach(depends in ${${PROJECT_NAME}_BUILD_DEPENDS})
diff --git a/env-hooks/15.rosjava.bash.em b/env-hooks/15.rosjava.bash.em
index b68a7797bc63e71e4a9a268aaf73d73d1fec9ab6..dcbedf1d7620bf14770eda5b484737e6760d80c1 100644
--- a/env-hooks/15.rosjava.bash.em
+++ b/env-hooks/15.rosjava.bash.em
@@ -2,6 +2,7 @@
 
 @[if DEVELSPACE]@
 export ROS_MAVEN_PATH=`python @(CMAKE_CURRENT_SOURCE_DIR)/generate_ros_maven_path.py`
+export ROS_MAVEN_DEPLOYMENT_PATH=`python @(CMAKE_CURRENT_SOURCE_DIR)/generate_ros_maven_path.py --deployment-repository`
 @[else]@
 export ROS_MAVEN_PATH=`python @(CMAKE_INSTALL_PREFIX)/share/rosjava_tools/generate_ros_maven_path.py`
 @[end if]@
diff --git a/generate_ros_maven_path.py b/generate_ros_maven_path.py
index 6d2ef8cf987fa105e12ddba28895b4a470688320..93860798557619f4b301732bf9bb7e73b82a223a 100755
--- a/generate_ros_maven_path.py
+++ b/generate_ros_maven_path.py
@@ -1,9 +1,16 @@
 #!/usr/bin/env python
 
 import os
+import argparse
 
 CATKIN_MARKER_FILE = '.catkin'
 
+def parse_arguments():
+    parser = argparse.ArgumentParser(description='Generate environment variables for the rosjava maven environment.')
+    parser.add_argument('-d', '--deployment-repository', action='store_true', help='Return the current devel workspace maven directory.')
+    args = parser.parse_args()
+    return args
+
 def get_workspaces(environ):
     '''
     Based on CMAKE_PREFIX_PATH return all catkin workspaces.
@@ -13,10 +20,15 @@ def get_workspaces(environ):
     value = environ[env_name] if env_name in environ else ''
     paths = [path for path in value.split(os.pathsep) if path]
     # remove non-workspace paths
-    workspaces = [path for path in paths if os.path.isfile(os.path.join(path, CATKIN_MARKER_FILE)) or (include_fuerte and path.startswith('/opt/ros/fuerte'))]
+    workspaces = [path for path in paths if os.path.isfile(os.path.join(path, CATKIN_MARKER_FILE))]
     return workspaces
 
 if __name__ == '__main__':
+    args = parse_arguments()
     workspaces = get_workspaces(dict(os.environ))
-    maven_repository_paths = [os.path.join(path, 'maven') for path in workspaces]
-    print os.pathsep.join(maven_repository_paths)
+    if args.deployment_repository:
+        # assuming one value exists here
+        print os.path.join(workspaces[0], 'share', 'maven')
+    else:
+        maven_repository_paths = [os.path.join(path, 'share', 'maven') for path in workspaces]
+        print os.pathsep.join(maven_repository_paths)