Acceleo/Maven
Contents
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
- 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.
<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
- 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>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.