Projet

Général

Profil

MAY Maven Standalone Setup » Historique » Révision 17

Révision 16 (Anonyme, 24/10/2014 13:05) → Révision 17/18 (Anonyme, 30/10/2014 10:48)

h1. MAY Maven Standalone Setup 

 h2. Use Cases 

 It is possible to use maven to generate code so that Eclipse is not needed anymore. 
 For example, one possible workflow is to use another IDE and executing 

 <pre>mvn generate-sources</pre> 

 after modifying the speadl file. 

 It is also included in all other maven calls such as:  

 <pre>mvn package</pre> 

 All of this is of course compatible with the use of Eclipse (see the last section of this page on issues and their resolution). 

 h2. Prerequisites 

 Please read [[MAY Maven Eclipse Setup]] to better understand some of the concepts used here. 

 h2. Modifying the POM File 

 The In order to do that, use the following POM file resulting from using Maven and MAY together (as explained on the page [[MAY Maven Eclipse Setup]]) is as follow (omitting the dependencies for the components): 
 file: 

 <pre> 
 <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> 
     
	 <groupId>XXX</groupId> 
     
	 <artifactId>XXX</artifactId> 
     
	 <version>XXX</version> 

     

	 <properties> 
		 <may-lib-version>3.4.0</may-lib-version> 
		 <xtext-version>2.7.2</xtext-version> 
		 <may-version>3.4.0</may-version> 
	 </properties> 

	 <dependencies> 
		 <dependency> 
			 <groupId>fr.irit.smac.lib.may</groupId> 
			 <artifactId>common-components</artifactId> 
			 <version>${may-lib-version}</version> 
		 </dependency> 
	 </dependencies> 

	 <build> 
         
		 <!-- This is already present in the default POM --> 
		 <sourceDirectory>src</sourceDirectory> 
         
		 <resources> 
             
			 <resource> 
                 
				 <directory>src</directory> 
                 
				 <excludes> 
                     
					 <exclude>**/*.java</exclude> 
                 
				 </excludes> 
             
			 </resource> 
         
		 </resources> 
         
		 <plugins> 
             
			 <!-- This is already present in the default POM --> 
			 <plugin> 
                 
				 <artifactId>maven-compiler-plugin</artifactId> 
                 
				 <version>3.1</version> 
                 
				 <configuration> 
                     
					 <source>1.7</source> 
                     
					 <target>1.7</target> 
                 
				 </configuration> 
             
			 </plugin> 
             
			 <!-- This configure the maven to take into account the SpeADL code in the speadl-gen directory --> 
             
			 <plugin> 
                 
				 <groupId>org.codehaus.mojo</groupId> 
                 
				 <artifactId>build-helper-maven-plugin</artifactId> 
                 
				 <version>1.8</version> 
                 
				 <executions> 
                     
					 <execution> 
                         
						 <id>add-source</id> 
                         
						 <goals> 
                             
							 <goal>add-source</goal> 
                         
						 </goals> 
                         
						 <configuration> 
                             
							 <sources> 
                                 
								 <source>speadl-gen</source> 
                             
							 </sources> 
                         
						 </configuration> 
                     
					 </execution> 
                     
					 <!-- The following is only needed so that speadl files are included  
                          
						 in the generated maven artifact --> 
                     
					 <execution> 
                         
						 <id>add-resource</id> 
                         
						 <goals> 
                             
							 <goal>add-resource</goal> 
                         
						 </goals> 
                         
						 <configuration> 
                             
							 <resources> 
                                 
								 <resource> 
                                     
									 <directory>${project.build.sourceDirectory}</directory> 
                                     
									 <includes> 
                                         
										 <include>**/*.speadl</include> 
                                     
									 </includes> 
                                 
								 </resource> 
                             
							 </resources> 
                         
						 </configuration> 
                     
					 </execution> 
                 
				 </executions> 
             
			 </plugin> 
         </plugins> 
     </build> 
 </project> 
 </pre> 

 We need to tell Maven that we want to generate 
			 <!-- This is needed cleaning the SpeADL code from it, we must add the Xtext plugin taking care of that: 
 <pre> 
 <project ...> 
	 ... 
	 <properties> 
		 <xtext-version>2.7.2</xtext-version> 
		 <may-version>3.4.1</may-version> 
	 </properties> 
	 ... 
	 <build> 
		 <plugins> generated file before regenerating them 
			       But not when doing a clean --> 
			 ... 
			 <plugin> 
				 <groupId>org.apache.maven.plugins</groupId> 
				 <artifactId>maven-clean-plugin</artifactId> 
				 <version>2.6</version> <version>2.5</version> 
				 <executions> 
					 <execution> 
						 <!-- hack in order for the file not to be removed on clean but only  
							 prior to code generation from xtext-maven-plugin --> 
						 <phase>generate-sources</phase> 
						 <goals> 
							 <goal>clean</goal> 
						 </goals> 
						 <configuration> 
							 <excludeDefaultDirectories>true</excludeDefaultDirectories> 
							 <filesets> 
								 <fileset> 
									 <directory>speadl-gen</directory> 
								 </fileset> 
							 </filesets> 
						 </configuration> 
					 </execution> 
				 </executions> 
			 </plugin> 
			 <!-- This is needed for generating the file directly from maven --> 
			 <plugin> 
				 <groupId>org.eclipse.xtext</groupId> 
				 <artifactId>xtext-maven-plugin</artifactId> 
				 <version>${xtext-version}</version> 
				 <executions> 
					 <execution> 
						 <goals> 
							 <goal>generate</goal> 
						 </goals> 
					 </execution> 
				 </executions> 
				 <configuration> 
					 <languages> 
						 <language> 
							 <setup>fr.irit.smac.may.speadl.SpeADLStandaloneSetup</setup> 
							 <outputConfigurations> 
								 <outputConfiguration> 
									 <outputDirectory>speadl-gen</outputDirectory> 
								 </outputConfiguration> 
							 </outputConfigurations> 
						 </language> 
					 </languages> 
				 </configuration> 
				 <dependencies> 
					 <dependency> 
						 <groupId>fr.irit.smac.may</groupId> 
						 <artifactId>fr.irit.smac.may.speadl</artifactId> 
						 <version>${may-version}</version> 
					 </dependency> 
				 </dependencies> 
			 </plugin> 
			 ... 
		 </plugins> 
	 </build> 
 </project> 
 </pre> 

 h2. Possible Issues and Resolutions 

 h3. Errors in the POM file 

 If the POM file contains the following errors in Eclipse: 

  Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-clean-plugin:2.5:clean (execution: default, phase: generate-sources) 

 and 

  Plugin execution not covered by lifecycle configuration: org.eclipse.xtext:xtext-maven-plugin:2.6.2:generate (execution: default, phase: generate-sources) 

 When hovering on the error, choose the following quickfix: 

  Permanently mark goal clean in pom.xml as ignored as ignored in Eclipse build. 

 and 

  Permanently mark goal generate in pom.xml as ignored as ignored in Eclipse build. 

 This will prevent the Maven plugin in Eclipse to generate the source code while Eclipse also does it internally.