使用antlr4-maven-plugin进行主代码和测试代码

时间:2015-06-28 04:53:16

标签: java maven antlr4

我正在开发一个项目,我在主代码中有一个antlr4语法,并且我想添加一个"迷你语法"对于一些测试。我希望为该迷你语法生成的.java文件只能用于测试代码。 antlr4-maven-plugin可以支持吗?

经过一些实验,我决定采用这种不太理想的设置:

  • 我的主要定位语法和以测试为目标的语法都在src/main/resources中(我知道这不是标准的地方;我设置sourceDirectory来解释这个问题)
  • antrun插件将${project.build.directory}/generated-sources/antlr4/**/MyTestGrammar*.java
    发送至${project.build.directory}/generated-test-resources/antlr4
  • build-helper-maven-plugin插件添加了${project.build.directory}/generated-test-resources/antlr4
    作为测试源目录

这需要三个插件配置,并且我明确指定哪些生成的语法用于测试,哪些用于主代码。还有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

将测试语法保存在$ {baseDir} / src / test / antlr4的子文件夹中。 然后你可以尝试在POM的build-plugins元素中添加这样的东西:

    <plugin>
        <groupId>org.antlr</groupId>
        <artifactId>antlr4-maven-plugin</artifactId>
        <version>${antlr4.plugin.version}</version>
        <configuration>
            <arguments>
                <argument>-visitor</argument>
            </arguments>
        </configuration>
        <executions>

            <execution>
                <id>antlr-4</id>
                <goals>
                    <goal>antlr4</goal>
                </goals>
            </execution>

            <execution>
                <id>antlr-test</id>
                <configuration>
                    <sourceDirectory>${baseDir}/src/test/antlr4</sourceDirectory>
                    <outputDirectory>${baseDir}/target/generated-test-sources-antlr/antlr4</outputDirectory>
                </configuration>
                <phase>generate-test-sources</phase>
                <goals>
                    <goal>antlr4</goal>
                </goals>
            </execution>

        </executions>
    </plugin>

然后在编译测试类时添加生成源:

 <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>add-test-sources</id>
                        <phase>generate-test-sources</phase>
                        <goals>
                            <goal>add-test-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>${baseDir}/target/generated-test-sources-antlr/antlr4</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

您可能希望根据需要调整目录和包名称