Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "Acceleo/Maven"

m (Stand Alone)
m (Configuration)
(24 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
= Maven Integration =
 
= Maven Integration =
 +
 +
== Debug Messages ==
 +
Debug messages in Maven can be activated with a "-X" at the end of your maven command. For example to have the debug message of the clean operation, switch "mvn clean" to this "mvn clean -X".
 +
 +
== Maven Hosting ==
 +
The artifacts necessary for the build are currently hosted on github while we are waiting for the right to upload them on the maven repository of the Eclipse Foundation. https://bugs.eclipse.org/bugs/show_bug.cgi?id=377603
 +
 +
New repositories may appear in the upcoming months.
 +
 +
== Releases Notes ==
 +
===2012/09/7===
 +
* Fixing the possible ClassCastException with multiple generators built in a single maven build.
 +
* The build will now fail if there are errors.
 +
* A new property has been introduced to deactivate the failure on error. (<failOnError>false</failOnError>)
 +
 +
===2012/07/09===
 +
* The meta-model can now be resolved from the compilation dependencies and not only from the runtime dependencies. You can have the meta-model in a dependency resolved by Tycho and not only in one resolved by Maven
 +
* Improved debug messages
 +
 +
===2012/06/25===
 +
* Fix a bug for Mac OS X and Linux support of the build with dependencies inside jars
 +
* Improved debug messages
 +
 +
===2012/05/20===
 +
* First release
 +
 +
== Configuration ==
 +
The Acceleo maven plugin uses a configuration block to find the information about the project that should be compiled. Here is an example of this configuration for an UML generator.
 +
  <configuration>
 +
    <useBinaryResources>false</useBinaryResources>
 +
    <usePlatformResourcePath>true</usePlatformResourcePath>
 +
    <acceleoProject>
 +
      <root>${project.basedir}</root>
 +
      <entries>
 +
        <entry>
 +
          <input>src/main/java</input>
 +
          <output>target/classes</output>
 +
        </entry>
 +
      </entries>
 +
      <jars>
 +
        <jar>p2.eclipse-plugin:org.obeonetwork.pim.uml2.gen.java</jar>
 +
      </jars>
 +
    </acceleoProject>
 +
    <packagesToRegister>
 +
      <packageToRegister>org.eclipse.uml2.uml.UMLPackage</packageToRegister>
 +
    </packagesToRegister>
 +
    <uriHandler>org.eclipse.acceleo.maven.AcceleoURIHandler</uriHandler>
 +
    <failOnError>false</failOnError>
 +
  </configuration>
 +
 +
* <span style="font-weight:bold">useBinaryResource</span> - indicate that the advanced serialization should be used. The compiled modules produced are smaller but they are not as powerful to support complex URI use case (dynamic meta-models for example). This option should be at "false" by default.
 +
* <span style="font-weight:bold">usePlatformResourcePath</span> - indicate that absolute paths should be converted to "platform:/" relative paths. This option should be at "true" by default.
 +
* <span style="font-weight:bold">root</span> - The root of the project
 +
* <span style="font-weight:bold">entries</span> - Classpath entries for example "src" as the input and "bin" as the output.
 +
* <span style="font-weight:bold">jars</span> - The dependencies of the generator. Those dependencies can be defined using one of the following conventions
 +
** <span style="font-weight:bold">${project.basedir}\lib\myJar.jar</span> - A jar file located in the project.
 +
** <span style="font-weight:bold">p2.eclipse-plugin:org.eclipse.acceleo.anotherGenerator</span> - Another generator resolved thanks to Tycho.
 +
** <span style="font-weight:bold">p2.eclipse-plugin:org.eclipse.acceleo.anotherGenerator:1.0.0</span> - Another generator resolved thanks to Tycho limited to a specific version.
 +
** <span style="font-weight:bold">org.eclipse.acceleo:org.eclipse.acceleo.anotherGenerator</span> - Another generator resolved by maven.
 +
** <span style="font-weight:bold">org.eclipse.acceleo:org.eclipse.acceleo.anotherGenerator:1.0.0</span> - Another generator resolved by maven limited to a specific version.
 +
** <span style="font-weight:bold">org.eclipse.acceleo.anotherGenerator</span> - Another generator defined as a maven dependency.
 +
** <span style="font-weight:bold">org.eclipse.acceleo.anotherGenerator:1.0.0</span> - Another generator defined as a maven dependency with a restriction on a specific version.
 +
** <span style="font-weight:bold">C:\Users\MyName\...\myJar.jar</span> - The absolute path of a jar file.
 +
* <span style="font-weight:bold">packagesToRegister</span> - The name of the Java class that should be used to register the package on which the generation is launched.
 +
* <span style="font-weight:bold">uriHandler</span> - An AcceleoURIHandler used to convert the URI of the dependencies (if you want a different behavior than the usePlatformResourcePath). The default URI handler provided (org.eclipse.acceleo.maven.AcceleoURIHandler), does the same job as the option usePlatformResourcePath.
 +
* <span style="font-weight:bold">failOnError</span> - Indicates if the compilation should fail if errors are found (true by default).
  
 
== Stand Alone ==
 
== Stand Alone ==
 
Launch this with the following command: mvn clean org.eclipse.acceleo:maven:3.2.1:acceleo-compile compile verify
 
Launch this with the following command: mvn clean org.eclipse.acceleo:maven:3.2.1:acceleo-compile compile verify
 +
 +
* example: http://git.eclipse.org/c/m2t/org.eclipse.acceleo.git/tree/tests/org.eclipse.acceleo.maven.tests
 +
* pom.xml: http://git.eclipse.org/c/m2t/org.eclipse.acceleo.git/tree/tests/org.eclipse.acceleo.maven.tests/pom.xml
  
 
The header of a regular maven pom.xml file.
 
The header of a regular maven pom.xml file.
Line 116: Line 185:
  
 
Launch this with the following command: mvn clean org.eclipse.acceleo:maven:3.2.1:acceleo-compile compile verify
 
Launch this with the following command: mvn clean org.eclipse.acceleo:maven:3.2.1:acceleo-compile compile verify
 +
 +
* example: http://git.eclipse.org/c/m2t/org.eclipse.acceleo.git/tree/tests/org.eclipse.acceleo.maven.plugin.tests
 +
* pom.xml: http://git.eclipse.org/c/m2t/org.eclipse.acceleo.git/tree/tests/org.eclipse.acceleo.maven.plugin.tests/pom.xml
 +
 +
The following build only manages the compilation of an UML generator that is using another UML plugin as a dependency, for the support of features and update site have a look at Eclipse [[Minerva]].
 +
 +
The regular header of a Tycho based build.
 +
  <project xmlns="http://maven.apache.org/POM/4.0.0"
 +
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 +
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 +
   
 +
    <modelVersion>4.0.0</modelVersion>
 +
 +
The configuration of the plugin (the artifactId must match the name of the plugin).
 +
    <groupId>org.eclipse.acceleo</groupId>
 +
    <artifactId>org.eclipse.acceleo.maven.plugin.tests</artifactId>
 +
    <version>1.0.0.qualifier</version>
 +
    <packaging>eclipse-plugin</packaging>
 +
 +
The properties of the build
 +
 +
    <properties>
 +
      <tycho-version>0.14.1</tycho-version>
 +
    </properties>
 +
   
 +
    <profiles>
 +
      <profile>
 +
        <id>platform-indigo</id>
 +
        <activation>
 +
          <activeByDefault>true</activeByDefault>
 +
          <property>
 +
            <name>platform-version-name</name>
 +
            <value>indigo</value>
 +
          </property>
 +
        </activation>
 +
        <properties>
 +
          <uml-to-java-site>http://marketplace.obeonetwork.com/updates/od5/</uml-to-java-site>
 +
          <eclipse-site>http://download.eclipse.org/releases/indigo</eclipse-site>
 +
          <platform-version>[3.7,3.8)</platform-version>
 +
        </properties>
 +
      </profile>
 +
    </profiles>
 +
 +
Where to find the dependencies.
 +
    <repositories>
 +
      <repository>
 +
        <id>eclipse-platform</id>
 +
        <layout>p2</layout>
 +
        <url>${eclipse-site}</url>
 +
      </repository>
 +
      <repository>
 +
        <id>uml-to-java</id>
 +
        <layout>p2</layout>
 +
        <url>${uml-to-java-site}</url>
 +
      </repository>
 +
      <repository>
 +
        <id>Indigo Release</id>
 +
        <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/indigo</url>
 +
      </repository>
 +
      <repository>
 +
        <id>Juno Release</id>
 +
        <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/juno</url>
 +
      </repository>
 +
      <repository>
 +
        <id>Snapshots</id>
 +
        <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/snapshots</url>
 +
      </repository>
 +
    </repositories>
 +
 +
Where to find the maven plugin used during the build.
 +
    <pluginRepositories>
 +
      <pluginRepository>
 +
        <id>codehaus.snapshots</id>
 +
        <url>http://snapshots.repository.codehaus.org/</url>
 +
      </pluginRepository>
 +
      <pluginRepository>
 +
        <id>Indigo Release</id>
 +
        <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/indigo</url>
 +
      </pluginRepository>
 +
      <pluginRepository>
 +
        <id>Juno Release</id>
 +
        <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/juno</url>
 +
      </pluginRepository>
 +
      <pluginRepository>
 +
        <id>Snapshots</id>
 +
        <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/snapshots</url>
 +
      </pluginRepository>
 +
    </pluginRepositories>
 +
 +
The dependencies used.
 +
    <dependencies><span style="color:#FF40C6">
 +
      <dependency>
 +
        <groupId>org.eclipse.acceleo</groupId>
 +
        <artifactId>maven</artifactId>
 +
        <version>3.2.1</version>
 +
      </dependency></span>
 +
      <dependency>
 +
        <groupId>org.eclipse.uml2</groupId>
 +
        <artifactId>uml</artifactId>
 +
        <version>3.2.1</version>
 +
      </dependency>
 +
      <dependency>
 +
        <groupId>org.eclipse.uml2</groupId>
 +
        <artifactId>common</artifactId>
 +
        <version>1.6.0</version>
 +
      </dependency>
 +
      <dependency>
 +
        <groupId>org.slf4j</groupId>
 +
        <artifactId>slf4j-simple</artifactId>
 +
        <version>1.6.4</version>
 +
      </dependency>
 +
    </dependencies>
 +
 +
The configuration of the build. You can see here that we are building this generator while using another existing generator as a dependency. This generator is, here, found by Tycho thanks to the update site define above in the "repositories" section.
 +
    <build>
 +
      <plugins>
 +
        <plugin>
 +
          <groupId>org.eclipse.tycho</groupId>
 +
          <artifactId>tycho-maven-plugin</artifactId>
 +
          <version>${tycho-version}</version>
 +
          <extensions>true</extensions>
 +
        </plugin>
 +
        <plugin>
 +
          <groupId>org.eclipse.tycho</groupId>
 +
          <artifactId>target-platform-configuration</artifactId>
 +
          <version>${tycho-version}</version>
 +
          <configuration>
 +
            <resolver>p2</resolver>
 +
            <pomDependencies>consider</pomDependencies>
 +
          </configuration>
 +
        </plugin>
 +
        <plugin>
 +
          <groupId>org.eclipse.acceleo</groupId>
 +
          <artifactId>maven</artifactId>
 +
          <version>3.2.1</version>
 +
          <executions>
 +
            <execution>
 +
              <phase>compile</phase>
 +
            </execution>
 +
          </executions><span style="color:#FF40C6">
 +
          <configuration>
 +
            <useBinaryResources>false</useBinaryResources>
 +
            <usePlatformResourcePath>true</usePlatformResourcePath>
 +
            <acceleoProject>
 +
              <root>${project.basedir}</root>
 +
              <entries>
 +
                <entry>
 +
                  <input>src/main/java</input>
 +
                  <output>target/classes</output>
 +
                </entry>
 +
              </entries>
 +
              <jars>
 +
                <jar>p2.eclipse-plugin:org.obeonetwork.pim.uml2.gen.java</jar>
 +
              </jars>
 +
            </acceleoProject>
 +
            <packagesToRegister>
 +
              <packageToRegister>org.eclipse.uml2.uml.UMLPackage</packageToRegister>
 +
            </packagesToRegister>
 +
            <uriHandler>org.eclipse.acceleo.maven.AcceleoURIHandler</uriHandler>
 +
          </configuration></span>
 +
        </plugin>
 +
      </plugins>
 +
      <pluginManagement>
 +
        <plugins>
 +
          <plugin>
 +
            <groupId>org.eclipse.tycho</groupId>
 +
            <artifactId>tycho-compiler-plugin</artifactId>
 +
            <version>${tycho-version}</version>
 +
            <configuration>
 +
              <encoding>UTF-8</encoding>
 +
            </configuration>
 +
          </plugin>
 +
          <plugin>
 +
            <!-- TODO remove workaround when https://issues.sonatype.org/browse/TYCHO-473 is fixed -->
 +
            <groupId>org.eclipse.tycho</groupId>
 +
            <artifactId>tycho-source-plugin</artifactId>
 +
            <version>${tycho-version}</version>
 +
            <executions>
 +
              <execution>
 +
                <id>attach-source</id>
 +
                <phase>process-classes</phase>
 +
                <goals>
 +
                  <goal>plugin-source</goal>
 +
                </goals>
 +
              </execution>
 +
            </executions>
 +
          </plugin>
 +
          <plugin>
 +
            <groupId>org.apache.maven.plugins</groupId>
 +
            <artifactId>maven-resources-plugin</artifactId>
 +
            <version>2.4.1</version>
 +
            <configuration>
 +
              <encoding>ISO-8859-1</encoding>
 +
            </configuration>
 +
          </plugin>
 +
          <plugin>
 +
            <groupId>org.apache.maven.plugins</groupId>
 +
            <artifactId>maven-antrun-plugin</artifactId>
 +
            <version>1.3</version>
 +
          </plugin>
 +
        </plugins>
 +
      </pluginManagement>
 +
    </build>
 +
  </project>
 +
 +
== Plugin Management (parent and children pom.xml) ==
 +
In order to support a complex maven architecture with a parent pom.xml and children pom.xml, you should declare in the parent pom.xml the following code
 +
  <build><span style="color:#FF40C6">
 +
    <pluginManagement>
 +
      <plugins>
 +
        <plugin>
 +
          <groupId>org.eclipse.acceleo</groupId>
 +
        <artifactId>maven</artifactId>
 +
        <version>3.2.1</version>
 +
          <executions>
 +
            <execution>
 +
              <id>acceleo-compile</id>
 +
              <phase>compile</phase>
 +
              <goals>
 +
                <goal>acceleo-compile</goal>
 +
              </goals>
 +
            </execution>
 +
          </executions>
 +
        </plugin>
 +
      </plugins>
 +
    </pluginManagement></span>
 +
  </build>
 +
 +
And in the children, the Acceleo configuration, like this
 +
 +
  <build>
 +
    <plugins>
 +
      <plugin>
 +
        <groupId>org.eclipse.acceleo</groupId>
 +
        <artifactId>maven</artifactId>
 +
        <version>3.2.1</version>
 +
        <executions><span style="color:#FF40C6">
 +
          <execution>
 +
            <phase>compile</phase>
 +
            <goals>
 +
              <goal>acceleo-compile</goal>
 +
            </goals>
 +
          </execution></span>
 +
        </executions>
 +
        <configuration>
 +
          <useBinaryResources>false</useBinaryResources>
 +
          <usePlatformResourcePath>true</usePlatformResourcePath>
 +
          <acceleoProject>
 +
            <root>${project.basedir}</root>
 +
            <entries>
 +
              <entry>
 +
                <input>src</input>
 +
                <output>target/classes</output>
 +
              </entry>
 +
            </entries>
 +
          </acceleoProject>
 +
          <packagesToRegister>
 +
            <packageToRegister>org.eclipse.emf.ecore.EcorePackage</packageToRegister>
 +
          </packagesToRegister>
 +
        </configuration>
 +
      </plugin>
 +
    </plugins>
 +
  </build>
 +
 +
The Acceleo compilation will be launch during the compilation phase without having to specify it in the maven command. It will work with a simple "mvn clean verify".
 +
 +
== Known Issues ==
 +
=== ClassCast Exception: XXXFactory cannot be casted into a XXXFactoryImpl ===
 +
It happens sometimes with complex dependencies between generators during a same build (if in the same build, you are building the metamodel and the generators), it should work anyway. Building the meta-model separately and resolving it with a Tycho based dependency and the location of the update site of the meta-model seems to fix this issue.
 +
 +
This issue should be fixed in the latest release.

Revision as of 05:39, 7 September 2012

Maven Integration

Debug Messages

Debug messages in Maven can be activated with a "-X" at the end of your maven command. For example to have the debug message of the clean operation, switch "mvn clean" to this "mvn clean -X".

Maven Hosting

The artifacts necessary for the build are currently hosted on github while we are waiting for the right to upload them on the maven repository of the Eclipse Foundation. https://bugs.eclipse.org/bugs/show_bug.cgi?id=377603

New repositories may appear in the upcoming months.

Releases Notes

2012/09/7

  • Fixing the possible ClassCastException with multiple generators built in a single maven build.
  • The build will now fail if there are errors.
  • A new property has been introduced to deactivate the failure on error. (<failOnError>false</failOnError>)

2012/07/09

  • The meta-model can now be resolved from the compilation dependencies and not only from the runtime dependencies. You can have the meta-model in a dependency resolved by Tycho and not only in one resolved by Maven
  • Improved debug messages

2012/06/25

  • Fix a bug for Mac OS X and Linux support of the build with dependencies inside jars
  • Improved debug messages

2012/05/20

  • First release

Configuration

The Acceleo maven plugin uses a configuration block to find the information about the project that should be compiled. Here is an example of this configuration for an UML generator.

 <configuration>
   <useBinaryResources>false</useBinaryResources>
   <usePlatformResourcePath>true</usePlatformResourcePath>
   <acceleoProject>
     <root>${project.basedir}</root>
     <entries>
       <entry>
         <input>src/main/java</input>
         <output>target/classes</output>
       </entry>
     </entries>
     <jars>
       <jar>p2.eclipse-plugin:org.obeonetwork.pim.uml2.gen.java</jar>
     </jars>
   </acceleoProject>
   <packagesToRegister>
     <packageToRegister>org.eclipse.uml2.uml.UMLPackage</packageToRegister>
   </packagesToRegister>
   <uriHandler>org.eclipse.acceleo.maven.AcceleoURIHandler</uriHandler>
   <failOnError>false</failOnError>
 </configuration>
  • useBinaryResource - indicate that the advanced serialization should be used. The compiled modules produced are smaller but they are not as powerful to support complex URI use case (dynamic meta-models for example). This option should be at "false" by default.
  • usePlatformResourcePath - indicate that absolute paths should be converted to "platform:/" relative paths. This option should be at "true" by default.
  • root - The root of the project
  • entries - Classpath entries for example "src" as the input and "bin" as the output.
  • jars - The dependencies of the generator. Those dependencies can be defined using one of the following conventions
    • ${project.basedir}\lib\myJar.jar - A jar file located in the project.
    • p2.eclipse-plugin:org.eclipse.acceleo.anotherGenerator - Another generator resolved thanks to Tycho.
    • p2.eclipse-plugin:org.eclipse.acceleo.anotherGenerator:1.0.0 - Another generator resolved thanks to Tycho limited to a specific version.
    • org.eclipse.acceleo:org.eclipse.acceleo.anotherGenerator - Another generator resolved by maven.
    • org.eclipse.acceleo:org.eclipse.acceleo.anotherGenerator:1.0.0 - Another generator resolved by maven limited to a specific version.
    • org.eclipse.acceleo.anotherGenerator - Another generator defined as a maven dependency.
    • org.eclipse.acceleo.anotherGenerator:1.0.0 - Another generator defined as a maven dependency with a restriction on a specific version.
    • C:\Users\MyName\...\myJar.jar - The absolute path of a jar file.
  • packagesToRegister - The name of the Java class that should be used to register the package on which the generation is launched.
  • uriHandler - An AcceleoURIHandler used to convert the URI of the dependencies (if you want a different behavior than the usePlatformResourcePath). The default URI handler provided (org.eclipse.acceleo.maven.AcceleoURIHandler), does the same job as the option usePlatformResourcePath.
  • failOnError - Indicates if the compilation should fail if errors are found (true by default).

Stand Alone

Launch this with the following command: mvn clean org.eclipse.acceleo:maven:3.2.1:acceleo-compile compile verify

The header of a regular maven pom.xml file.

 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

The information of the project to build.

   <groupId>org.eclipse.acceleo</groupId>
   <artifactId>maven-test</artifactId>
   <version>3.2.1</version>
   <packaging>jar</packaging>
   <name>org.eclipse.acceleo.maven.tests</name>
   <description>The Acceleo maven tests plugin.</description>    

The repositories to use for the dependencies of this project (ex: org.eclipse.uml2.uml).

   <repositories>
     <repository>
       <id>Indigo Release</id>
       <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/indigo</url>
     </repository>
     <repository>
       <id>Juno Release</id>
       <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/juno</url>
     </repository>
     <repository>
       <id>Snapshots</id>
       <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/snapshots</url>
     </repository>
   </repositories>

The repositories where the plugin used during the build will be found (ex: org.eclipse.acceleo.maven).

   <pluginRepositories>
     <pluginRepository>
       <id>Indigo Release</id>
       <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/indigo</url>
     </pluginRepository>
     <pluginRepository>
       <id>Juno Release</id>
       <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/juno</url>
     </pluginRepository>
     <pluginRepository>
       <id>Snapshots</id>
       <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/snapshots</url>
     </pluginRepository>
   </pluginRepositories>

The dependencies used to build. Here, the Acceleo maven plugin, the two plugins needed for the UML meta-model and log4j.

   <dependencies>
     <dependency>
       <groupId>org.eclipse.acceleo</groupId>
       <artifactId>maven</artifactId>
       <version>3.2.1</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.uml2</groupId>
       <artifactId>uml</artifactId>
       <version>3.2.1</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.uml2</groupId>
       <artifactId>common</artifactId>
       <version>1.6.0</version>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
       <version>1.6.4</version>
     </dependency>
   </dependencies>

The configuration of the Acceleo build.

   <build>
     <plugins>
       <plugin>
         <groupId>org.eclipse.acceleo</groupId>
         <artifactId>maven</artifactId>
         <version>3.2.1</version>
         <executions>
           <execution>
             <phase>compile</phase>
           </execution>
         </executions>
         <configuration>
           <useBinaryResources>false</useBinaryResources>
           <usePlatformResourcePath>true</usePlatformResourcePath>
           <acceleoProject>
             <root>${project.basedir}</root>
             <entries>
               <entry>
                 <input>src/main/java</input>
                 <output>target/classes</output>
               </entry>
             </entries>
           </acceleoProject>
           <packagesToRegister>
             <packageToRegister>org.eclipse.uml2.uml.UMLPackage</packageToRegister>
           </packagesToRegister>
         </configuration>
       </plugin>
     </plugins>
   </build>
 </project>

Maven Tycho build

Launch this with the following command: mvn clean org.eclipse.acceleo:maven:3.2.1:acceleo-compile compile verify

The following build only manages the compilation of an UML generator that is using another UML plugin as a dependency, for the support of features and update site have a look at Eclipse Minerva.

The regular header of a Tycho based build.

 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   
   <modelVersion>4.0.0</modelVersion>

The configuration of the plugin (the artifactId must match the name of the plugin).

   <groupId>org.eclipse.acceleo</groupId>
   <artifactId>org.eclipse.acceleo.maven.plugin.tests</artifactId>
   <version>1.0.0.qualifier</version>
   <packaging>eclipse-plugin</packaging>

The properties of the build

   <properties>
     <tycho-version>0.14.1</tycho-version>
   </properties>
   
   <profiles>
     <profile>
       <id>platform-indigo</id>
       <activation>
         <activeByDefault>true</activeByDefault>
         <property>
           <name>platform-version-name</name>
           <value>indigo</value>
         </property>
       </activation>
       <properties>
         <uml-to-java-site>http://marketplace.obeonetwork.com/updates/od5/</uml-to-java-site>
         <eclipse-site>http://download.eclipse.org/releases/indigo</eclipse-site>
         <platform-version>[3.7,3.8)</platform-version>
       </properties>
     </profile>
   </profiles>

Where to find the dependencies.

   <repositories>
     <repository>
       <id>eclipse-platform</id>
       <layout>p2</layout>
       <url>${eclipse-site}</url>
     </repository>
     <repository>
       <id>uml-to-java</id>
       <layout>p2</layout>
       <url>${uml-to-java-site}</url>
     </repository>
     <repository>
       <id>Indigo Release</id>
       <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/indigo</url>
     </repository>
     <repository>
       <id>Juno Release</id>
       <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/juno</url>
     </repository>
     <repository>
       <id>Snapshots</id>
       <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/snapshots</url>
     </repository>
   </repositories>

Where to find the maven plugin used during the build.

   <pluginRepositories>
     <pluginRepository>
       <id>codehaus.snapshots</id>
       <url>http://snapshots.repository.codehaus.org/</url>
     </pluginRepository>
     <pluginRepository>
       <id>Indigo Release</id>
       <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/indigo</url>
     </pluginRepository>
     <pluginRepository>
       <id>Juno Release</id>
       <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/juno</url>
     </pluginRepository>
     <pluginRepository>
       <id>Snapshots</id>
       <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/snapshots</url>
     </pluginRepository>
   </pluginRepositories>

The dependencies used.

   <dependencies>
     <dependency>
       <groupId>org.eclipse.acceleo</groupId>
       <artifactId>maven</artifactId>
       <version>3.2.1</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.uml2</groupId>
       <artifactId>uml</artifactId>
       <version>3.2.1</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.uml2</groupId>
       <artifactId>common</artifactId>
       <version>1.6.0</version>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
       <version>1.6.4</version>
     </dependency>
   </dependencies>

The configuration of the build. You can see here that we are building this generator while using another existing generator as a dependency. This generator is, here, found by Tycho thanks to the update site define above in the "repositories" section.

   <build>
     <plugins>
       <plugin>
         <groupId>org.eclipse.tycho</groupId>
         <artifactId>tycho-maven-plugin</artifactId>
         <version>${tycho-version}</version>
         <extensions>true</extensions>
       </plugin>
       <plugin>
         <groupId>org.eclipse.tycho</groupId>
         <artifactId>target-platform-configuration</artifactId>
         <version>${tycho-version}</version>
         <configuration>
           <resolver>p2</resolver>
           <pomDependencies>consider</pomDependencies>
         </configuration>
       </plugin>
       <plugin>
         <groupId>org.eclipse.acceleo</groupId>
         <artifactId>maven</artifactId>
         <version>3.2.1</version>
         <executions>
           <execution>
             <phase>compile</phase>
           </execution>
         </executions>
         <configuration>
           <useBinaryResources>false</useBinaryResources>
           <usePlatformResourcePath>true</usePlatformResourcePath>
           <acceleoProject>
             <root>${project.basedir}</root>
             <entries>
               <entry>
                 <input>src/main/java</input>
                 <output>target/classes</output>
               </entry>
             </entries>
             <jars>
               <jar>p2.eclipse-plugin:org.obeonetwork.pim.uml2.gen.java</jar>
             </jars>
           </acceleoProject>
           <packagesToRegister>
             <packageToRegister>org.eclipse.uml2.uml.UMLPackage</packageToRegister>
           </packagesToRegister>
           <uriHandler>org.eclipse.acceleo.maven.AcceleoURIHandler</uriHandler>
         </configuration>
       </plugin>
     </plugins>
     <pluginManagement>
       <plugins>
         <plugin>
           <groupId>org.eclipse.tycho</groupId>
           <artifactId>tycho-compiler-plugin</artifactId>
           <version>${tycho-version}</version>
           <configuration>
             <encoding>UTF-8</encoding>
           </configuration>
         </plugin>
         <plugin>
           <groupId>org.eclipse.tycho</groupId>
           <artifactId>tycho-source-plugin</artifactId>
           <version>${tycho-version}</version>
           <executions>
             <execution>
               <id>attach-source</id>
               <phase>process-classes</phase>
               <goals>
                 <goal>plugin-source</goal>
               </goals>
             </execution>
           </executions>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-resources-plugin</artifactId>
           <version>2.4.1</version>
           <configuration>
             <encoding>ISO-8859-1</encoding>
           </configuration>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-antrun-plugin</artifactId>
           <version>1.3</version>
         </plugin>
       </plugins>
     </pluginManagement>
   </build>
 </project>

Plugin Management (parent and children pom.xml)

In order to support a complex maven architecture with a parent pom.xml and children pom.xml, you should declare in the parent pom.xml the following code

 <build>
   <pluginManagement>
     <plugins>
       <plugin>
         <groupId>org.eclipse.acceleo</groupId>
        <artifactId>maven</artifactId>
        <version>3.2.1</version>
         <executions>
           <execution>
             <id>acceleo-compile</id>
             <phase>compile</phase>
             <goals>
               <goal>acceleo-compile</goal>
             </goals>
           </execution>
         </executions>
       </plugin>
     </plugins>
   </pluginManagement>
 </build>

And in the children, the Acceleo configuration, like this

 <build>
   <plugins>
     <plugin>
       <groupId>org.eclipse.acceleo</groupId>
       <artifactId>maven</artifactId>
       <version>3.2.1</version>
       <executions>
         <execution>
           <phase>compile</phase>
           <goals>
              <goal>acceleo-compile</goal>
            </goals>
         </execution>
       </executions>
       <configuration>
         <useBinaryResources>false</useBinaryResources>
         <usePlatformResourcePath>true</usePlatformResourcePath>
         <acceleoProject>
           <root>${project.basedir}</root>
           <entries>
             <entry>
               <input>src</input>
               <output>target/classes</output>
             </entry>
           </entries>
         </acceleoProject>
         <packagesToRegister>
           <packageToRegister>org.eclipse.emf.ecore.EcorePackage</packageToRegister>
         </packagesToRegister>
       </configuration>
     </plugin>
   </plugins>
 </build>

The Acceleo compilation will be launch during the compilation phase without having to specify it in the maven command. It will work with a simple "mvn clean verify".

Known Issues

ClassCast Exception: XXXFactory cannot be casted into a XXXFactoryImpl

It happens sometimes with complex dependencies between generators during a same build (if in the same build, you are building the metamodel and the generators), it should work anyway. Building the meta-model separately and resolving it with a Tycho based dependency and the location of the update site of the meta-model seems to fix this issue.

This issue should be fixed in the latest release.

Back to the top