使用Maven Antlr4插件从其他工件生成语法

dod*_*air 4 maven antlr4

我想使用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

  1. 使语法文件夹结构为/src/main/antlr4/org/nimy/antlr4/xml/xxxx.g4

  2. 在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)
  1. Java代码是在程序包中生成的?软件包org.nimy.antlr4.xml

github上的antlt4 maven插件源代码。尝试阅读它并获得配置项目的方法。antlr4源代码


归档时间:

查看次数:

4125 次

最近记录:

7 年 前