Create custom_msg_or_srv.jar
Instructions in building a .jar for rosjava to handle ROS msgs and ROS srvs. In summary, we will checkout and setup a rosjava environment in order to modify the rosjava_messages to build jar files of your custom messages and/or services.
Contents
Setup
Pre-req: ROS-hydro installed
sudo apt-get install --upgrade rosinstall
Create rosjava workspace
Create a parallel rosjava workspace from your catkin workspace
mkdir ~/rosjava_ws cd ~/rosjava_ws rosws init rosws merge /opt/ros/hydro/.rosinstall
Checkout rosjava src
git clone -b hydro https://github.com/rosjava/rosjava.git rosws merge rosjava/rosjava.rosinstall rosws update
Remove rosjava_test_msgs
rosjava_test_msgs throws a weird bug. To avoid do the following:
- cd ~/rosjava_ws/rosjava_message
- edit settlings.gradle
- comment out line "include rosjava_test_msgs"
Edit package.xml
Remove any ROS packages listed in package.xml file that you don't want to export. Then add the ROS package you are interested in exporting its messages and/or services. The file should look something like this:
<buildtool_depend>catkin</buildtool_depend> <build_depend>rosjava_build_tools</build_depend> <build_depend>rosjava_bootstrap</build_depend> <build_depend>your_ros_package</build_depend> <run_depend>rosjava_build_tools</run_depend> <run_depend>rosjava_bootstrap</run_depend>
Note: your_ros_package probably lives in a catkin workspace which is separate from this rosjava workspace. Make sure you can access that package. e.g. roscd your_ros_package should work.
Build and Export .jar
./gradlew build
My successful run in exporting the ros_package appl looks like:
Total time: 2.399 secs user@ubuntu: ~/rosjava_ws/rosjava_messages$ ./gradlew build :rosjava_messages is spawning subprojects: [appl] :appl:bugfixtask :appl:generateSources :appl:compileJava warning: [options] bootstrap class path not set in conjunction with -source 1.6 1 warning :appl:processResources UP-TO-DATE :appl:classes :appl:jar :appl:assemble :appl:compileTestJava UP-TO-DATE :appl:processTestResources UP-TO-DATE :appl:testClasses UP-TO-DATE :appl:test UP-TO-DATE :appl:check UP-TO-DATE :appl:build BUILD SUCCESSFUL
Note: ./gradlew tasks gives a helpful list of gradle commands
You will now find an exported .jar of your_ros_package that contains .class files of the messages and services defined in your package:
cd rosjava_messages/your_ros_package/build/libs/