Jump to: navigation, search

GettingStarted:Developer Main

This needs to be updated. Please bear that in mind when reading the content and feel free to help update it.

  1. Links nexus
  2. OSGi

Getting Started Overall

  1. Getting help and general communication
  2. Look into Weekly Project Meetings
  3. Set Up your Development Environment (OS, Development Tools etc)
  4. Pulling Hacking and Pushing All the Code from the CLI
    • GIT Cheat Sheet - A quick reference guide for common GIT commands and possible workflows.
  5. GettingStarted: Eclipse - Walks through how to get Eclipse set up. Presently focuses on the controller source as an example.
  6. Push + fix scenario
  7. Life Cycle of a Bug - Provides an overview of the life cycle of a bug and how it passes through various systems etc.
  8. Example Code - Check out these examples of various code that will introduce you to the controller and other projects / functionality.
    • Toaster Tutorial - Provides a simple walk through of the "Toaster" application which uses the MD-SAL framework.
  9. Startup Project Archetype - How to use the simple MD-SAL startup archetype
    • MD-SAL Archetype - Walks through using a maven archetype to quickly generate some starter projects based on the MD-SAL framework.
  10. Getting hooked into the GPG Web of Trust

JavaDoc Documentation

Tasks that need work

Tasks that Need Work

Helpful Tips and Tricks


Maven Archetypes

Maven Archetypes are sort of like 'templates' for maven projects. Currently for OpenDaylight we have the following archetypes:

  • odl-model-project - A maven archetype to create a yang model project that will generate java code from .yang files

MD-SAL Cliff Notes

Getting Started by Project


Sign up for controller-dev mailing list.


Sign up for vtn-dev mailing list.


Jump on the IRC Channel #opendaylight-ovsdb on irc.freenode.net


Sign up for snmp4sdn-dev mailing list.


Sign up for bgpcep-dev mailing list.


It may also be useful to look at the controller installation troubleshooting page.

Build Issues

There are some common recurring issues in building OpenDaylight which largely relate to the build environment and the occasional maven failing to fetching a given file.

Also, in general, it's very difficult to debug an error if you only include the one line of maven output which says it failed. It helps a lot to run maven with the -e flag and then try to find the lines of code where the actual error occurs.

Java Version

OpenDaylight assumes that you are building with Java 1.8 (Java 8). Make sure the output of java -version matches that. Something like this:

 $ java -version
 openjdk version "1.8.0_121"
 OpenJDK Runtime Environment (build 1.8.0_121-b14)
 OpenJDK 64-Bit Server VM (build 25.121-b14, mixed mode)

Maven Version

OpenDaylight assumes the use of Maven 3.3.9 or newer. Make sure the output of mvn -v matches that. Something like this:

 $ mvn -v
 Apache Maven 3.3.9
 Maven home: /usr/share/maven
 Java version: 1.8.0_121, vendor: Oracle Corporation
 Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
 Default locale: en_GB, platform encoding: UTF-8
 OS name: "linux", version: "4.9.0-1-amd64", arch: "amd64", family: "unix"

Errors fetching a pom or jar file

We're working on this, but for whatever reason, fetching artifacts and pom files from nexus seems to occasionally run into issues where it will either fail to download a necessary file, give you a version with zero size or otherwise hiccup.

Often merely running the build again will fix the issue.

Other times, merely deleting the ~/.m2/ directories contents and then rebuilding will fix the problem.

In rare cases, you may have to resort to actually finding the file that isn't being copied and manually copying it down as described in this mailing list post.

Out of memory error / PermGen space

If you run into an out of memory error while building either just a normal out of memory error or one complaining about PermGen space, the easiest way to fix this is to adjust your maven options as explained here.

Increase the amount of memory by changing the "MAVEN_OPTS" ENV variable. An example for a Bash shell is as follows:

 export MAVEN_OPTS="-Xmx1024m -XX:MaxPermSize=1024m"
 syntax for setting varies on the OS used by the build machine. */

You can verify the variable is set with the following in a Bash shell.

 $ export | grep MAVEN_OPTS
 declare -x MAVEN_OPTS="-Xmx1024m -XX:MaxPermSize=1024m"

An example on a Linux based machine or a Mac you simply put "export" before the variable. e.g. export MAVEN_OPTS="-Xmx1024m -XX:MaxPermSize=1024m" (parentheses around the value after the equals sign). That ENV variable is not persistent unless you put it into a shell startup script. In Linux for example the ~/.bashrc file and Mac the ~/.bash_profile file.

Skipping Tests

While the various tests run during build are huge at helping to find bugs and they have to pass for a patch to be accepted, sometimes they get in the way of finding the root cause of a build error. You can disable them by adding -DskipTests to the end of your build command. So something like this:

 mvn clean install -DskipTests

Asking Questions

The following are various places for collaboration and asking questions: