Jump to: navigation, search

Difference between revisions of "Acceleo/Maven"

(Maven Tycho build)
(29 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 Acceleo artifacts and their stand alone dependencies are now hosted on repo.eclipse.org
 +
 +
== Releases Notes ==
 +
=== 2014/01/20 ===
 +
* The Acceleo artifacts are now hosted on repo.eclipse.org along with the maven plugin. They are now built as part of the Acceleo nightly build.
 +
* The artifactId of the maven plugin has been modified to org.eclipse.acceleo.maven to match all the other Acceleo artifacts
 +
* The hosting on raw.github.com is now deprecated!
 +
 +
===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:org.eclipse.acceleo.maven:3.5.0-SNAPSHOT: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 14: Line 86:
  
 
     <groupId>org.eclipse.acceleo</groupId>
 
     <groupId>org.eclipse.acceleo</groupId>
     <artifactId>maven-test</artifactId>
+
     <artifactId>org.eclipse.acceleo.maven-test</artifactId>
     <version>3.2.1</version>
+
     <version>3.5.0-SNAPSHOT</version>
 
     <packaging>jar</packaging>
 
     <packaging>jar</packaging>
 
     <name>org.eclipse.acceleo.maven.tests</name>
 
     <name>org.eclipse.acceleo.maven.tests</name>
Line 21: Line 93:
  
 
The repositories to use for the dependencies of this project (ex: org.eclipse.uml2.uml).
 
The repositories to use for the dependencies of this project (ex: org.eclipse.uml2.uml).
 
 
     <repositories>
 
     <repositories>
 
       <repository>
 
       <repository>
         <id>Indigo Release</id>
+
         <id>Eclipse - Acceleo Snapshots</id>
         <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/indigo</url>
+
         <url>https://repo.eclipse.org/content/repositories/acceleo-snapshots</url>
      </repository>
+
      <repository>
+
        <id>Juno Release</id>
+
        <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/juno</url>
+
 
       </repository>
 
       </repository>
 
       <repository>
 
       <repository>
         <id>Snapshots</id>
+
         <id>Eclipse - Acceleo Release</id>
         <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/snapshots</url>
+
         <url>https://repo.eclipse.org/content/repositories/acceleo-releases</url>
 
       </repository>
 
       </repository>
 
     </repositories>
 
     </repositories>
Line 41: Line 108:
 
     <pluginRepositories>
 
     <pluginRepositories>
 
       <pluginRepository>
 
       <pluginRepository>
         <id>Indigo Release</id>
+
         <id>Eclipse - Acceleo Snapshots</id>
         <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/indigo</url>
+
         <url>https://repo.eclipse.org/content/repositories/acceleo-snapshots</url>
 
       </pluginRepository>
 
       </pluginRepository>
 
       <pluginRepository>
 
       <pluginRepository>
         <id>Juno Release</id>
+
         <id>Eclipse - Acceleo Release</id>
         <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/juno</url>
+
         <url>https://repo.eclipse.org/content/repositories/acceleo-releases</url>
      </pluginRepository>
+
      <pluginRepository>
+
        <id>Snapshots</id>
+
        <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/snapshots</url>
+
 
       </pluginRepository>
 
       </pluginRepository>
 
     </pluginRepositories>
 
     </pluginRepositories>
Line 56: Line 119:
 
The dependencies used to build. Here, the Acceleo maven plugin, the two plugins needed for the UML meta-model and log4j.
 
The dependencies used to build. Here, the Acceleo maven plugin, the two plugins needed for the UML meta-model and log4j.
  
     <dependencies><span style="color:#FF40C6">
+
     <dependencies><span style="color:#1B9AF7">
 
       <dependency>
 
       <dependency>
 
         <groupId>org.eclipse.acceleo</groupId>
 
         <groupId>org.eclipse.acceleo</groupId>
         <artifactId>maven</artifactId>
+
         <artifactId>org.eclipse.acceleo.maven</artifactId>
         <version>3.2.1</version>
+
         <version>3.5.0-SNAPSHOT</version>
       </dependency></span>
+
       </dependency>
 +
      <dependency>
 +
        <groupId>org.eclipse.acceleo</groupId>
 +
        <artifactId>org.eclipse.acceleo.engine</artifactId>
 +
        <version>3.5.0-SNAPSHOT</version>
 +
      </dependency>
 
       <dependency>
 
       <dependency>
 
         <groupId>org.eclipse.uml2</groupId>
 
         <groupId>org.eclipse.uml2</groupId>
         <artifactId>uml</artifactId>
+
         <artifactId>org.eclipse.uml2.uml</artifactId>
         <version>3.2.1</version>
+
         <version>4.1.1.v20130902-0826</version>
 
       </dependency>
 
       </dependency>
 
       <dependency>
 
       <dependency>
 
         <groupId>org.eclipse.uml2</groupId>
 
         <groupId>org.eclipse.uml2</groupId>
         <artifactId>common</artifactId>
+
         <artifactId>org.eclipse.uml2.types</artifactId>
         <version>1.6.0</version>
+
         <version>1.1.0.v20130902-0826</version>
 +
      </dependency>
 +
      <dependency>
 +
        <groupId>org.eclipse.uml2</groupId>
 +
        <artifactId>org.eclipse.uml2.common</artifactId>
 +
        <version>1.8.1.v20130902-0826</version>
 
       </dependency>
 
       </dependency>
 
       <dependency>
 
       <dependency>
Line 76: Line 149:
 
         <artifactId>slf4j-simple</artifactId>
 
         <artifactId>slf4j-simple</artifactId>
 
         <version>1.6.4</version>
 
         <version>1.6.4</version>
       </dependency>
+
       </dependency></span>
 
     </dependencies>
 
     </dependencies>
  
Line 85: Line 158:
 
         <plugin>
 
         <plugin>
 
           <groupId>org.eclipse.acceleo</groupId>
 
           <groupId>org.eclipse.acceleo</groupId>
           <artifactId>maven</artifactId>
+
           <artifactId>org.eclipse.acceleo.maven</artifactId>
           <version>3.2.1</version>
+
           <version>3.5.0-SNAPSHOT</version>
 
           <executions>
 
           <executions>
 
             <execution>
 
             <execution>
 
               <phase>compile</phase>
 
               <phase>compile</phase>
 
             </execution>
 
             </execution>
           </executions><span style="color:#FF40C6">
+
           </executions><span style="color:#1B9AF7">
 
           <configuration>
 
           <configuration>
 
             <useBinaryResources>false</useBinaryResources>
 
             <useBinaryResources>false</useBinaryResources>
Line 115: Line 188:
 
== Maven Tycho build ==
 
== Maven Tycho build ==
  
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:org.eclipse.acceleo.maven:3.5.0-SNAPSHOT: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.
+
* 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.
 
The regular header of a Tycho based build.
Line 129: Line 205:
 
     <groupId>org.eclipse.acceleo</groupId>
 
     <groupId>org.eclipse.acceleo</groupId>
 
     <artifactId>org.eclipse.acceleo.maven.plugin.tests</artifactId>
 
     <artifactId>org.eclipse.acceleo.maven.plugin.tests</artifactId>
     <version>1.0.0.qualifier</version>
+
     <version>3.5.0-SNAPSHOT</version>
 
     <packaging>eclipse-plugin</packaging>
 
     <packaging>eclipse-plugin</packaging>
  
Line 169: Line 245:
 
       </repository>
 
       </repository>
 
       <repository>
 
       <repository>
         <id>Indigo Release</id>
+
         <id>Eclipse - Acceleo Snapshots</id>
         <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/indigo</url>
+
         <url>https://repo.eclipse.org/content/repositories/acceleo-snapshots</url>
 
       </repository>
 
       </repository>
 
       <repository>
 
       <repository>
         <id>Juno Release</id>
+
         <id>Eclipse - Acceleo Release</id>
         <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/juno</url>
+
         <url>https://repo.eclipse.org/content/repositories/acceleo-releases</url>
      </repository>
+
      <repository>
+
        <id>Snapshots</id>
+
        <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/snapshots</url>
+
 
       </repository>
 
       </repository>
 
     </repositories>
 
     </repositories>
Line 189: Line 261:
 
       </pluginRepository>
 
       </pluginRepository>
 
       <pluginRepository>
 
       <pluginRepository>
         <id>Indigo Release</id>
+
         <id>Eclipse - Acceleo Snapshots</id>
         <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/indigo</url>
+
         <url>https://repo.eclipse.org/content/repositories/acceleo-snapshots</url>
 
       </pluginRepository>
 
       </pluginRepository>
 
       <pluginRepository>
 
       <pluginRepository>
         <id>Juno Release</id>
+
         <id>Eclipse - Acceleo Release</id>
         <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/releases/juno</url>
+
         <url>https://repo.eclipse.org/content/repositories/acceleo-releases</url>
      </pluginRepository>
+
      <pluginRepository>
+
        <id>Snapshots</id>
+
        <url>https://raw.github.com/eclipse/acceleo/master/maven/repository/snapshots</url>
+
 
       </pluginRepository>
 
       </pluginRepository>
 
     </pluginRepositories>
 
     </pluginRepositories>
  
 
The dependencies used.
 
The dependencies used.
     <dependencies>
+
     <dependencies><span style="color:#1B9AF7">
 +
      <dependency>
 +
        <groupId>org.eclipse.acceleo</groupId>
 +
        <artifactId>org.eclipse.acceleo.maven</artifactId>
 +
        <version>3.5.0-SNAPSHOT</version>
 +
      </dependency>
 
       <dependency>
 
       <dependency>
 
         <groupId>org.eclipse.acceleo</groupId>
 
         <groupId>org.eclipse.acceleo</groupId>
         <artifactId>maven</artifactId>
+
         <artifactId>org.eclipse.acceleo.engine</artifactId>
         <version>3.2.1</version>
+
         <version>3.5.0-SNAPSHOT</version>
 
       </dependency>
 
       </dependency>
 
       <dependency>
 
       <dependency>
 
         <groupId>org.eclipse.uml2</groupId>
 
         <groupId>org.eclipse.uml2</groupId>
         <artifactId>uml</artifactId>
+
         <artifactId>org.eclipse.uml2.uml</artifactId>
         <version>3.2.1</version>
+
         <version>4.1.1.v20130902-0826</version>
 
       </dependency>
 
       </dependency>
 
       <dependency>
 
       <dependency>
 
         <groupId>org.eclipse.uml2</groupId>
 
         <groupId>org.eclipse.uml2</groupId>
         <artifactId>common</artifactId>
+
         <artifactId>org.eclipse.uml2.types</artifactId>
         <version>1.6.0</version>
+
         <version>1.1.0.v20130902-0826</version>
 +
      </dependency>
 +
      <dependency>
 +
        <groupId>org.eclipse.uml2</groupId>
 +
        <artifactId>org.eclipse.uml2.common</artifactId>
 +
        <version>1.8.1.v20130902-0826</version>
 
       </dependency>
 
       </dependency>
 
       <dependency>
 
       <dependency>
Line 224: Line 302:
 
         <version>1.6.4</version>
 
         <version>1.6.4</version>
 
       </dependency>
 
       </dependency>
     </dependencies>
+
     </span></dependencies>
  
The configuration of the build.
+
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>
 
     <build>
 
       <plugins>
 
       <plugins>
Line 246: Line 324:
 
         <plugin>
 
         <plugin>
 
           <groupId>org.eclipse.acceleo</groupId>
 
           <groupId>org.eclipse.acceleo</groupId>
           <artifactId>maven</artifactId>
+
           <artifactId>org.eclipse.acceleo.maven</artifactId>
           <version>3.2.1</version>
+
           <version>3.5.0-SNAPSHOT</version>
 
           <executions>
 
           <executions>
 
             <execution>
 
             <execution>
 
               <phase>compile</phase>
 
               <phase>compile</phase>
 
             </execution>
 
             </execution>
           </executions>
+
           </executions><span style="color:#1B9AF7">
 
           <configuration>
 
           <configuration>
 
             <useBinaryResources>false</useBinaryResources>
 
             <useBinaryResources>false</useBinaryResources>
Line 272: Line 350:
 
             </packagesToRegister>
 
             </packagesToRegister>
 
             <uriHandler>org.eclipse.acceleo.maven.AcceleoURIHandler</uriHandler>
 
             <uriHandler>org.eclipse.acceleo.maven.AcceleoURIHandler</uriHandler>
           </configuration>
+
           </configuration></span>
 
         </plugin>
 
         </plugin>
 
       </plugins>
 
       </plugins>
Line 317: Line 395:
 
     </build>
 
     </build>
 
   </project>
 
   </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:#1B9AF7">
 +
    <pluginManagement>
 +
      <plugins>
 +
        <plugin>
 +
          <groupId>org.eclipse.acceleo</groupId>
 +
        <artifactId>org.eclipse.acceleo.maven</artifactId>
 +
        <version>3.5.0-SNAPSHOT</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>org.eclipse.acceleo.maven</artifactId>
 +
        <version>3.5.0-SNAPSHOT</version>
 +
        <executions><span style="color:#1B9AF7">
 +
          <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 06:46, 21 January 2014

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 Acceleo artifacts and their stand alone dependencies are now hosted on repo.eclipse.org

Releases Notes

2014/01/20

  • The Acceleo artifacts are now hosted on repo.eclipse.org along with the maven plugin. They are now built as part of the Acceleo nightly build.
  • The artifactId of the maven plugin has been modified to org.eclipse.acceleo.maven to match all the other Acceleo artifacts
  • The hosting on raw.github.com is now deprecated!

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:org.eclipse.acceleo.maven:3.5.0-SNAPSHOT: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>org.eclipse.acceleo.maven-test</artifactId>
   <version>3.5.0-SNAPSHOT</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>Eclipse - Acceleo Snapshots</id>
       <url>https://repo.eclipse.org/content/repositories/acceleo-snapshots</url>
     </repository>
     <repository>
       <id>Eclipse - Acceleo Release</id>
       <url>https://repo.eclipse.org/content/repositories/acceleo-releases</url>
     </repository>
   </repositories>

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

   <pluginRepositories>
     <pluginRepository>
       <id>Eclipse - Acceleo Snapshots</id>
       <url>https://repo.eclipse.org/content/repositories/acceleo-snapshots</url>
     </pluginRepository>
     <pluginRepository>
       <id>Eclipse - Acceleo Release</id>
       <url>https://repo.eclipse.org/content/repositories/acceleo-releases</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>org.eclipse.acceleo.maven</artifactId>
       <version>3.5.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.acceleo</groupId>
       <artifactId>org.eclipse.acceleo.engine</artifactId>
       <version>3.5.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.uml2</groupId>
       <artifactId>org.eclipse.uml2.uml</artifactId>
       <version>4.1.1.v20130902-0826</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.uml2</groupId>
       <artifactId>org.eclipse.uml2.types</artifactId>
       <version>1.1.0.v20130902-0826</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.uml2</groupId>
       <artifactId>org.eclipse.uml2.common</artifactId>
       <version>1.8.1.v20130902-0826</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>org.eclipse.acceleo.maven</artifactId>
         <version>3.5.0-SNAPSHOT</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:org.eclipse.acceleo.maven:3.5.0-SNAPSHOT: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>3.5.0-SNAPSHOT</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>Eclipse - Acceleo Snapshots</id>
       <url>https://repo.eclipse.org/content/repositories/acceleo-snapshots</url>
     </repository>
     <repository>
       <id>Eclipse - Acceleo Release</id>
       <url>https://repo.eclipse.org/content/repositories/acceleo-releases</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>Eclipse - Acceleo Snapshots</id>
       <url>https://repo.eclipse.org/content/repositories/acceleo-snapshots</url>
     </pluginRepository>
     <pluginRepository>
       <id>Eclipse - Acceleo Release</id>
       <url>https://repo.eclipse.org/content/repositories/acceleo-releases</url>
     </pluginRepository>
   </pluginRepositories>

The dependencies used.

   <dependencies>
     <dependency>
       <groupId>org.eclipse.acceleo</groupId>
       <artifactId>org.eclipse.acceleo.maven</artifactId>
       <version>3.5.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.acceleo</groupId>
       <artifactId>org.eclipse.acceleo.engine</artifactId>
       <version>3.5.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.uml2</groupId>
       <artifactId>org.eclipse.uml2.uml</artifactId>
       <version>4.1.1.v20130902-0826</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.uml2</groupId>
       <artifactId>org.eclipse.uml2.types</artifactId>
       <version>1.1.0.v20130902-0826</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.uml2</groupId>
       <artifactId>org.eclipse.uml2.common</artifactId>
       <version>1.8.1.v20130902-0826</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>org.eclipse.acceleo.maven</artifactId>
         <version>3.5.0-SNAPSHOT</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>org.eclipse.acceleo.maven</artifactId>
        <version>3.5.0-SNAPSHOT</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>org.eclipse.acceleo.maven</artifactId>
       <version>3.5.0-SNAPSHOT</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.