Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Maven构建XText 2.0和XPand 1.1_Java_Maven_Xtext - Fatal编程技术网

Java 使用Maven构建XText 2.0和XPand 1.1

Java 使用Maven构建XText 2.0和XPand 1.1,java,maven,xtext,Java,Maven,Xtext,我正在寻找一个使用XTEXT2.0的项目的示例pom.xml,特别是“普通”maven项目中的代码生成器XPand1.1 我已经花时间在谷歌上了,但我可能会使用错误的术语,或者没有例子 我已经有了一个xtext 0.7.2的pom,我想将该项目更新为2.0。但我不知道从哪里开始。 目前我拥有的是4个maven项目的结构: mydsl mydsl.generator(未使用) mydsl.ui 应用程序(包含用于生成代码的xpand模板) mydsl项目是xtext 0.7.2项目,带有(my

我正在寻找一个使用XTEXT2.0的项目的示例
pom.xml
,特别是“普通”maven项目中的代码生成器XPand1.1

我已经花时间在谷歌上了,但我可能会使用错误的术语,或者没有例子

我已经有了一个xtext 0.7.2的pom,我想将该项目更新为2.0。但我不知道从哪里开始。 目前我拥有的是4个maven项目的结构:

  • mydsl
  • mydsl.generator(未使用)
  • mydsl.ui
  • 应用程序(包含用于生成代码的xpand模板)
mydsl项目是xtext 0.7.2项目,带有(
mydsl
)中的附加pom,它将生成的类作为maven依赖项提供

应用程序
有一个
mwe
工作流和xpand模板来生成源代码。该项目对
mydsl

因为我还没有实现这么多gui编辑器功能,我甚至想扔掉所有的xtext东西(语法和xpand模板除外),构建一个全新的XTEXT2项目


但是我真的不知道如何为(新的)mydsl项目构建pom。

我找到了真正的maven xtext2项目

勾选这个:
我找到了真正的maven xtext2项目

勾选这个:

最棘手的部分之一是,在XText2语法项目中,
xtend gen
文件夹中有一个名为
Generator.java
的文件。该文件不是由
Generate.mwe2
工作流创建的,而是由一些eclipse魔术创建的。但是编译代码需要这个文件

所以我的解决方案是让eclipse生成该文件,然后像任何普通手写类一样将其添加到svn中

然后只需要将这个pom添加到项目中。因此,maven也将启动工作流。 但是有一个缺点:工作流还为相邻项目生成类,
.ui
.test
,因此它需要有清单文件。为了克服maven发布插件的麻烦,可以添加一个父maven项目,其中包含grammer项目和两个假人
.ui
.test

包含xtext语法的项目Pom:

...
<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>
该项目中的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>

最棘手的部分之一是,在XText2 grammer项目中,
xtend gen
文件夹中有一个名为
Generator.java
的文件。该文件不是由
Generate.mwe2
工作流创建的,而是由一些eclipse魔术创建的。但是编译代码需要这个文件

所以我的解决方案是让eclipse生成该文件,然后像任何普通手写类一样将其添加到svn中

然后只需要将这个pom添加到项目中。因此,maven也将启动工作流。 但是有一个缺点:工作流还为相邻项目生成类,
.ui
.test
,因此它需要有清单文件。为了克服maven发布插件的麻烦,可以添加一个父maven项目,其中包含grammer项目和两个假人
.ui
.test

包含xtext语法的项目Pom:

...
<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>
该项目中的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>