对主要代码和测试代码使用 antlr4-maven-plugin

using antlr4-maven-plugin for both main and test code

我正在做一个项目,我在其中的主要代码中有一个 antlr4 语法,我想为一些测试添加一个 "mini-grammar"。我希望为该迷你语法生成的 .java 文件仅可用于测试代码。 antlr4-maven-plugin 可以支持吗?

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

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

将您的测试语法保存在 ${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>

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