Jump to: navigation, search

Tycho/Target Platform

The target platform is the set of artifacts from which Tycho resolves the project's dependencies.

Background: OSGi allows to specify dependencies with version ranges and package dependencies (Import-Package). These dependencies (intentionally) do not map to unique artifacts. In order to pick a set of concrete bundles to be used for compilation, test execution, and assembly, Tycho needs a set of candidate artifacts which may be used to match the dependencies. This list of candidate artifacts is called the "target platform". The process of selecting artifacts from the target platform according to the project's dependencies is called "dependency resolution".

There are different ways to define the target platform; the most common ones are repositories with layout=p2, which add entire p2 repositories to the target platform, or target definition files for more fine-grained control.

Which approach should I use for the target platform for my project?

Since there are a few different ways to configure a target platform in Tycho, here are some rule of thumbs for the most common cases:

  1. If you are already using a target file in Eclipse, and that target file only contains location elements with type="InstallableUnit", use that target file for the Tycho build. In all other cases, it is not possible to share the target platform configuration between Tycho and Eclipse.
  2. If you don't care about individual bundles and versions, just configure the needed p2 repositories in the POM and have Tycho pick anything required from these repositories.
  3. If you want control over the which bundles/bundle versions are visible to the build, use a target file.

Target platform configuration

The target platform is defined through POM configuration (see details below). Each module has its own target platform, although with the normal configuration inheritance in Maven, the target platform configurations are usually the same across multiple modules. In case multiple configuration approaches are combined (which should be rarely necessary), the target platform contains the union of the content defined through each approach.

Repositories with layout p2

In a standard Maven project, one can configure Maven repositories in the POM from which the dependencies of the project are resolved. While Maven repositories cannot be used directly (see below for an indirect approach), Tycho can use p2 repositories for resolving dependencies. These p2 repositories need to be marked with layout=p2. Example:

   <repository>
      <id>eclipse-indigo</id>
      <url>http://download.eclipse.org/releases/indigo</url>
      <layout>p2</layout>
   </repository>

With this configuration, Tycho can use any unit (i.e. bundle, feature, etc.) from the specified p2 repositories to resolve the project dependencies. In terms of the target platform, this means that the entire content of the p2 repositories becomes part of the target platform.

Target definition files

TODO

Artifacts from Maven repositories

TODO