<> == Goals == * Provide a way for ros people to build, package and use rosjava packages * integrate rosjava with the other ros tools like roslaunch etc. * Also provide a way for non-ros people to just pull rosjava binaries for linking their own projects to a ros robot. * They shouldn't need to use the ros build environment - make maven repositories accessible for them. == 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 [[http://search.maven.org/|MavenCentral]] repository of all things java. We currently utilise a mix of repositories, some on the filesystem, some in the cloud: * `/opt/ros/indigo/share/maven` : installed via ubuntu debian rosjava packages * `./devel/share/maven` : devel workspace repo for source builds * `./install/share/maven` : install workspace repo for source installs * [[https://github.com/rosjava/rosjava_mvn_repo|github repository]] : an external repository for our own dependencies or when none of the above are accessible * [[http://search.maven.org/|MavenCentral]] : standard java dependencies (need to move more of our deps here). === 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. * Utilise `package.xml` for version and dependency information. * Relay build steps of a single package to gradle 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 [[rosjava/Tutorials/indigo/Rolling RosJava Debs|Rolling RosJava Debs Tutorial]].