Providing add ons

Luc Bourlier edited this page Nov 4, 2013 · 7 revisions

Before reading this page, you may want to have a look at the description of the build process for one ecosystem.

This page describes how add-on features and plug-ins have to be configured to be picked up by the ecosystem build.

This doesn't describe the process to be accepted in the ecosystem. That latter process is outlined in the Contributor's guide.

Strict version dependencies

Most Scala IDE plug-ins interfaces with Scala IDE or Scala Compiler code. As neither provide a stable public API, the current requirement in the ecosystems is that plug-ins and features need to have strict version dependencies set to Scala IDE and Scala.

The tool org.scalaide.buildtools.UpdateAddonManifests, which is part of the build-tools project, does the work of finding the right versions and updating the MANIFEST.MF and feature.xml files.

It can be added to a Maven configuration using the following profile:

<profile>
  <!-- pull the data needed to add the version numbers to the manifests -->
  <id>set-versions</id>
  <dependencies>
    <dependency>
      <groupId>org.scala-ide</groupId>
      <artifactId>build-tools_2.9.2</artifactId>
      <version>0.2.0</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
          <execution>
            <id>set-versions</id>
            <goals>
              <goal>java</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <classpathScope>compile</classpathScope>
          <mainClass>org.scalaide.buildtools.UpdateAddonManifests</mainClass>
          <arguments>
            <argument>${repo.scala-ide}</argument>
          </arguments>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <repositories>
    <repository>
      <!-- extra repository containing the build package -->
      <id>typesafe-ide</id>
      <name>Typesafe IDE repository</name>
      <url>http://repo.typesafe.com/typesafe/ide-2.9</url>
      <snapshots><enabled>true</enabled></snapshots>
    </repository>
  </repositories>
</profile>

It should be invoked before performing the normal build (because of how Tycho works), using the following command:

mvn -Pset-versions -P<build_profile> -Dtycho.style=maven --non-recursive exec:java

Configuration for Scala IDE 4.0.x

There are few breaking changes between Scala IDE 3.0.x and 4.0.x. A new version of the build tools was released to accommodate these changes. Use the following information to select a compatible version:

    <dependency>
      <groupId>org.scala-ide</groupId>
      <artifactId>build-tools_2.10</artifactId>
      <version>0.4.1</version>
    </dependency>
    <repository>
      <!-- extra repository containing the build package -->
      <id>typesafe-ide</id>
      <name>Typesafe IDE repository</name>
      <url>http://repo.typesafe.com/typesafe/ide-2.10</url>
      <snapshots><enabled>true</enabled></snapshots>
    </repository>

Update site with ecosystem versions

Once a build is done, it should be added to the add-on update site defined in the configuration file.

It is not required to keep old versions of the add-on in the update site, if they are already part of the ecosystem site. The ecosystem build keeps each existing add-on version if it doesn't detect a new version to replace it with.

In other terms, the update site keeps one plugin build for each precise flavor of the Eclipse-Scala-Scala-IDE toolchain: latest version that should be made available to the user.