[Documentation] [TitleIndex] [WordIndex

Goals

Build Tools

The rosjava build environment uses a mixture tools and while these are familiar to most java people, they are probably not to many ros roboticists so an explanation of how they fit together here is worthwhile.

Java

Java support at the moment is for the supported openjdk on the ros ubuntu platforms of reference. At the moment this is openjdk-7, but you are likely to find that it work on other java implementations as well as it doesn't use anything especially esoteric.

Gradle

Gradle is the tool used for managing single and multiple java project builds. CMake would be its equivalent for C++ projects. It provides a powerful scripting language as well as plugin support for a variety of modules and extensions.

Gradle's scope for rosjava builds extends to our concept of a stack. It will usually control the compilation and assembly of several related software packages.

There are also a couple of ros-specific gradle plugins in rosjava_bootstrap that pull common gradle scripting logic into a centralised place for rosjava projects. This is very much like the catkin cmake api.

There are of course other options for the java build environment, however gradle is a good fit for us because of the natural power of the scripting language it uses as well as being the new default build tool for android projects.

Maven

Where to store the binary results of a gradle build? How to handle system dependencies (aka rosdeps)? This is where maven comes in. It is a fully cross platform solution that lets you retrieve and deploy java dependencies. It can be locally on your filesystem, in a github repo, on a private server, or on the official MavenCentral repository of all things java.

We currently utilise a mix of repositories, some on the filesystem, some in the cloud:

Catkin

We use catkin only very minimally. It's role is to provide ros package information and be the glue that sequences builds across multiple repositories, possibly maintained by different people.

The last part is important - gradle can't do this very easily on its own without alot of infrastructure.

Debian Packages

Debian packages are simply a way of conveniently managing the following things that were previously not possible in the rosjava world pre-hydro. Some more detailed information can be found in the Rolling RosJava Debs Tutorial.


2024-04-13 13:05