我想使用 antlr4 为语法生成一个 java parser api。我意识到其他人可能对语法部分感兴趣,所以我想将 maven 中的解析器 Artifact 与语法 Artifact 分开。
我几乎已经完成了所有工作,问题似乎是它使用正确的包生成 *.java 文件,但将它们放在代表不同包的目录中。
我有一个带有父模块和两个模块的多模块 Maven 项目;语法和解析器。语法生成一个包含以下内容的简单 jar:
META-INF/
META-INF/MANIFEST.MF
org/
org/boazglean/
org/boazglean/dabar/
org/boazglean/dabar/grammer/
org/boazglean/dabar/grammer/DabarLexer.g4
org/boazglean/dabar/grammer/DabarParser.g4
META-INF/maven/
META-INF/maven/org.boazglean.dabar/
META-INF/maven/org.boazglean.dabar/grammer/
META-INF/maven/org.boazglean.dabar/grammer/pom.xml
META-INF/maven/org.boazglean.dabar/grammer/pom.properties
现在我想生成一个解析器 jar,包中有一堆解析器类
org.boazglean.dabar.parser
.这是我使用的 pom 配置:<plugin>
<groupId>org.antlr</groupId>
<artifactId>antlr4-maven-plugin</artifactId>
<version>4.0</version>
<executions>
<execution>
<goals>
<goal>antlr4</goal>
</goals>
<configuration>
<sourceDirectory>${antlr.dir}</sourceDirectory>
<listener>true</listener>
<visitor>true</visitor>
<arguments>
<argument>-package</argument>
<argument>org.boazglean.dabar.parser</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>extract-grammer</id>
<phase>initialize</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeArtifactIds>grammer</includeArtifactIds>
<outputDirectory>${antlr.dir}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
现在的问题是生成的源代码出现在错误的目录中(但它们确实有正确的包)。
head -n 2 parser/target/generated-sources/antlr4/org/boazglean/dabar/grammer/DabarLexer.java
// Generated from org/boazglean/dabar/grammer/DabarLexer.g4 by ANTLR 4.0
package org.boazglean.dabar.parser;
我是否遗漏了一些我应该用来配置 antlr4 的命令?
最佳答案
/src/main/antlr4/org/nimy/antlr4/xml/xxxx.g4
<plugin>
<groupId>org.antlr</groupId>
<artifactId>antlr4-maven-plugin</artifactId>
<version>4.1</version>
<configuration>
<listener>true</listener>
<visitor>true</visitor>
<arguments>
<argument>-package</argument>
</arguments>
</configuration>
<executions>
<execution>
<id>antlr-generate</id>
<phase>generate-sources</phase>
<goals>
<goal>antlr4</goal>
</goals>
</execution>
</executions>
</plugin>
包 org.nimy.antlr4.xml
github上的antlt4 maven插件源代码。尝试阅读它并获得配置项目的方法。 antlr4 source code
关于maven - 使用 maven antlr4 插件从其他 Artifact 生成语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16683135/