我想使用antlr4为语法生成Java解析器api。我意识到其他人可能对语法部分感兴趣,因此我想将Maven中的解析器工件与语法工件分开。
我几乎可以使所有工作正常,问题似乎是它使用正确的包生成了* .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
Run Code Online (Sandbox Code Playgroud)
现在,我想生成一个解析器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>
Run Code Online (Sandbox Code Playgroud)
现在的问题是,生成的源位于错误的目录中(但是它们确实具有正确的包)。
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;
Run Code Online (Sandbox Code Playgroud)
我是否缺少一些应该使用antlr4配置的命令?
小智 5
使语法文件夹结构为/src/main/antlr4/org/nimy/antlr4/xml/xxxx.g4
在pom.xml中
<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>
Run Code Online (Sandbox Code Playgroud)
github上的antlt4 maven插件源代码。尝试阅读它并获得配置项目的方法。antlr4源代码
| 归档时间: |
|
| 查看次数: |
4125 次 |
| 最近记录: |