2011-10-04 3 views
0

XText 2.0을 사용하는 프로젝트, 예를 들어 "일반"Maven 프로젝트의 코드 생성기 XP 및 1.1에 대해 pom.xml 예제를 찾고 있습니다.Maven을 사용하여 XText 2.0 및 XPand 1.1을 빌드하십시오.

나는 이미 Google과 시간을 보내고 있지만 잘못된 용어를 사용하거나 예제가 없습니다.

xtext 0.7.2에서 이미 작동하는 pom이 있고 프로젝트를 2.0으로 업데이트하려고합니다. 하지만 어디서부터 시작해야할지 모르겠다. 내가 지금있는 것은 4 개 받는다는 프로젝트의 구조 :

  • mydsl (사용되지 않음)
  • mydsl.generator
  • mydsl.ui
  • 응용 프로그램 (코드를 생성 할 수 XPAND 템플릿을 포함)

mydsl 프로젝트는 생성 된 클래스를 maven 종속성으로 제공하는 xtext 0.7.2 프로젝트와 추가 pom (mydsl)입니다.

application에는 mwe 워크 플로우와 소스 코드를 생성하는 xpand 템플릿이 있습니다. 이 프로젝트는 mydsl

에 대한 종속성을 가지고 있기 때문에 모든 xtext 자료를 멀리 던져 버리고 (작성자 및 xpand 템플릿 제외) 완전한 xtext 2 프로젝트를 작성하는 것을 제외하고는 많은 GUI 편집기 기능을 구현하지 않았습니다.

하지만 (새로운) mydsl 프로젝트에 대해 pom을 만드는 방법을 실제로 아는 것이 없습니다.

답변

1

하나는 XText2의 문법 프로젝트에 xtend-gen 폴더만한 이름 <<project>>Generator.java에 파일이있을 것입니다. 이 파일은 워크 플로우 Generate<<project>>.mwe2에 의해 생성 된 것이 아니라 일식 마법에 의해 생성 된 솔기가 있습니다. 그러나이 파일은 코드를 컴파일하는 데 필요합니다!

그래서 내 해결책은 이클립스가 그 파일을 생성하게하고 모든 일반적인 손으로 쓰는 클래스처럼 svn에 추가하는 것입니다.

다음이 pom을 프로젝트에 추가하기 만하면됩니다. 그래서 maven은 Workflow를 시작할 것입니다. 그러나 한 가지 단점이 있습니다. 워크 플로는 인접 프로젝트 인 .ui.test의 클래스도 생성하므로 매니페스트 파일이 필요합니다.

... 
<dependencies> 
    <dependency> 
     <groupId>org.eclipse.plugins</groupId> 
     <artifactId>org.eclipse.xtext.generator</artifactId> 
     <version>2.0.0.v201106070531</version> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.plugins</groupId> 
     <artifactId>org.eclipse.emf.codegen.ecore</artifactId> 
     <version>2.6.1.v20100914-1218</version> 
    </dependency> 
    <dependency> 
     <groupId>org.antlr.generator</groupId> 
     <artifactId>org.antlr.generator</artifactId> 
     <version>3.2.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.plugins</groupId> 
     <artifactId>org.eclipse.emf.mwe2.launch</artifactId> 
     <version>2.0.0.v201106070634</version> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.13</version> 
    </dependency> 
</dependencies> 
<build> 
    <sourceDirectory>src</sourceDirectory> 
    <resources> 
     <resource> 
      <directory>src</directory> 
     </resource> 
     <resource> 
      <directory>src-gen</directory> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
      <artifactId>maven-clean-plugin</artifactId> 
      <version>2.4.1</version> 
      <configuration> 
       <filesets> 
        <fileset> 
         <directory>${basedir}/src-gen</directory> 
         <includes> 
          <include>com/</include> 
          <include>org/</include> 
         </includes> 
         <followSymlinks>false</followSymlinks> 
        </fileset> 
        <fileset> 
         <directory>${basedir}/xtend-gen</directory> 
         <includes> 
          <include>com/</include> 
          <include>org/</include> 
         </includes> 
         <excludes> 
          <exclude>**/ProdDef2Generator.java</exclude> 
         </excludes> 
         <followSymlinks>false</followSymlinks> 
        </fileset> 
       </filesets> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.fornax.toolsupport</groupId> 
      <artifactId>fornax-oaw-m2-plugin</artifactId> 
      <version>3.2.1</version> 

      <configuration> 
       <!-- <checkResources> <checkResource> src/com\queomedia\bcsweb\productdefinition\ProdDef2.xtext 
        </checkResource> </checkResources> --> 
       <outletSrcDir>src-gen</outletSrcDir> 
       <outletSrcOnceDir>src</outletSrcOnceDir> 
       <rootDir>${project.basedir}</rootDir> 
      </configuration> 
      <executions> 
       <execution> 
        <id>generateGrammer</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>run-workflow</goal> 
        </goals> 


        <configuration> 
         <workflowDescriptor>src/org/test/test/GenerateProdDef2.mwe2</workflowDescriptor> 
         <workflowEngine>mwe2</workflowEngine> 
         <timestampFileName>generator-generateGrammer-timestamp.tmp</timestampFileName> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 


     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>build-helper-maven-plugin</artifactId> 
      <version>1.3</version> 
      <executions> 
       <execution> 
        <id>add-source</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>add-source</goal> 
        </goals> 
        <configuration> 
         <sources> 
          <source>src-gen</source> 
          <source>xtend-gen</source> 
         </sources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

     <!-- The plugin.xml must be included, but is not on a resource path --> 
     <plugin> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>process-resources</phase> 
        <configuration> 
         <tasks> 
          <copy todir="${basedir}/target/classes" file="${basedir}/plugin.xml" /> 
         </tasks> 
        </configuration> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

: 받는다는 해제 플러그인의 문제를 극복하기 위해, 하나는 문법 프로젝트와 xtext의 문법을 포함하는 프로젝트의 두 인형 .ui

.test 응원단을 포함하는 부모 받는다는 프로젝트를 추가 할 수 있습니다 소스 코드 생성을 위해 문법과 DSL을 사용하는 프로젝트의 POM. 이것은 xtext 0.7.1과 거의 같습니다. 하지만 한 가지 차이점이 있습니다. mwe 파일에 사용 된 MweReader이 더 이상 종료되지 않습니다 (xtext 1.0.1 이후). 따라서 org.eclipse.xtext.mwe.Reader을 사용해야합니다.이 독자는 더 이상 모델 파일을 입력으로 사용하지 않고 파일의 경로로 가져옵니다. 또한 소위 "슬롯"에 저장합니다. 하지만이 슬롯은 요소 목록입니다. 그래서 하나 개의 필요가 변경 : <expand value="templates::Main::main FOR model"/>에서 FORFOREACH

<dependencies> 

    <dependency> 
     <groupId>test.xtext</groupId>   
     <artifactId>grammerProject</artifactId>   
     <version>1.0.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.plugins</groupId> 
     <artifactId>org.eclipse.xtext.generator</artifactId> 
     <version>2.0.0.v201106070531</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.plugins</groupId> 
     <artifactId>org.eclipse.emf.codegen.ecore</artifactId> 
     <version>2.6.1.v20100914-1218</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.antlr.generator</groupId> 
     <artifactId>org.antlr.generator</artifactId> 
     <version>3.2.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.plugins</groupId> 
     <artifactId>org.eclipse.emf.mwe2.launch</artifactId> 
     <version>2.0.0.v201106070634</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.13</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 
<build> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
     </resource> 
     <resource> 
     <!-- there is the .mwe workflow located, in a sub dir called model, the dsl and in an other sub dir called templates, the xpt files. --> 
      <directory>src/main/xtext</directory>    
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
      <groupId>org.fornax.toolsupport</groupId> 
      <artifactId>fornax-oaw-m2-plugin</artifactId> 
      <version>3.2.1</version> 
      <configuration> 

       <rootDir>${project.basedir}</rootDir> 

       <!-- run only if this file is changed --> 
       <checkResources> 
        <checkResource> 
         src/main/xtext/model/GermanDesk.proddef2 
        </checkResource> 
       </checkResources> 
       <!-- 
       <outletSrcDir>src-gen</outletSrcDir> 
       <outletSrcOnceDir>src</outletSrcOnceDir> 
       -->     
      </configuration> 
      <executions> 
       <execution> 
        <id>generateJavaClassesFromXText</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>run-workflow</goal> 
        </goals> 
        <configuration> 
         <!-- Die Workflow-Description wird in einem Ressourcen-Verzeichnis gesucht. --> 
         <workflowDescriptor>ProdDef2JavaGenerator.mwe</workflowDescriptor> 
         <workflowEngine>mwe</workflowEngine> 
         <properties> 
          <projectBasedir>${project.basedir}</projectBasedir> 
         </properties> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>build-helper-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>add-source</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>add-source</goal> 
        </goals> 
        <configuration>  
         <sources> 
          <source>${basedir}/target/generated-sources</source> 
         </sources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

MWE 워크 플로우에 해당 프로젝트에

<workflow> 
    <property name="project.src.directory" value="${projectBasedir}/src/main"/> 
    <property name="project.target.directory" value="${projectBasedir}/target"/> 

    <property name="modelFileDir" value="${project.src.directory}/xtext/model/"/> 
    <property name="srcGenTargetDir" value="${project.target.directory}/generated-sources"/>  
    <property name="templateTargetDir" value="${project.target.directory}/generated-sources-templates"/> 

    <bean class="org.eclipse.emf.mwe.utils.StandaloneSetup" platformUri=".."/> 

    <component class="org.eclipse.emf.mwe.utils.DirectoryCleaner" directory="${srcGenTargetDir}"/> 
    <component class="org.eclipse.emf.mwe.utils.DirectoryCleaner" directory="${templateTargetDir}"/> 
    <component class="org.eclipse.xtext.mwe.Reader" path="${modelFileDir}" > 
     <register class="com.queomedia.bcsweb.productdefinition.ProdDef2StandaloneSetup"/> 
     <load slot='model' type='Model'/> 
    </component> 

    <component class="org.eclipse.xpand2.Generator"> 
     <metaModel class="org.eclipse.xtend.typesystem.emf.EmfRegistryMetaModel"/> 
     <fileEncoding value="UTF-8"/> 
     <expand value="templates::ProductCustomClass::productCustomClasses FOREACH model"/> 
     <genPath value="${templateTargetDir}"/> 

     <beautifier class="org.eclipse.xpand2.output.JavaBeautifier"/> 
    </component> 

    <component class="org.eclipse.xpand2.Generator"> 
     <metaModel class="org.eclipse.xtend.typesystem.emf.EmfRegistryMetaModel"/> 
     <fileEncoding value="UTF-8"/>  
     <expand value="templates::Main::main FOREACH model"/> 
     <genPath value="${srcGenTargetDir}"/> 

     <beautifier class="org.eclipse.xpand2.output.JavaBeautifier"/> 
    </component> 

</workflow>