对主要代码和测试代码使用 antlr4-maven-plugin
using antlr4-maven-plugin for both main and test code
我正在做一个项目,我在其中的主要代码中有一个 antlr4 语法,我想为一些测试添加一个 "mini-grammar"。我希望为该迷你语法生成的 .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
作为测试源目录
这需要三个插件配置,并且我明确指定哪些生成的语法用于测试,哪些用于主代码。有没有更好的方法?
将您的测试语法保存在 ${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>
您可能需要根据需要调整目录和包名称
我正在做一个项目,我在其中的主要代码中有一个 antlr4 语法,我想为一些测试添加一个 "mini-grammar"。我希望为该迷你语法生成的 .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
作为测试源目录
这需要三个插件配置,并且我明确指定哪些生成的语法用于测试,哪些用于主代码。有没有更好的方法?
将您的测试语法保存在 ${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>
您可能需要根据需要调整目录和包名称