为了账号安全,请及时绑定邮箱和手机立即绑定

Antlr4 在自己的 Maven 模块中

Antlr4 在自己的 Maven 模块中

慕容3067478 2023-07-28 16:09:22
当我构建使用 Antlr4 的 maven 模块并查看 Jar 时,从 Antlr4 编译生成的源位于根文件夹中。但是,当我想将 Jar 与生成的源作为依赖项包含在我的 Antlr4-impl 模块中,而我想使用生成的类时,它们无法找到。我怎样才能正确地将它们链接起来?我是否必须将生成的源移动到 maven src/main/java 部分?他们需要包裹吗?如果是,我如何在maven插件中设置源包?这是 antlr 生成模块中的我的 pom.xml:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <parent>        <artifactId>net-site-arti</artifactId>        <groupId>net.site.reverse</groupId>        <version>1.0-SNAPSHOT</version>        <relativePath>../pom.xml</relativePath>    </parent>    <modelVersion>4.0.0</modelVersion>    <artifactId>net-site-arti-antlr</artifactId>    <dependencies>        <dependency>            <groupId>org.antlr</groupId>            <artifactId>antlr4-runtime</artifactId>            <version>4.7.1</version>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.antlr</groupId>                <artifactId>antlr4-maven-plugin</artifactId>                <version>4.7.1</version>                <configuration>                    <outputDirectory>src/main/generated-sources</outputDirectory>                </configuration>                <executions>                    <execution>                        <goals>                            <goal>antlr4</goal>                        </goals>                    </execution>                </executions>            </plugin>
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

不是一个完美的解决方案,而是一个解决方案:

不幸的是,ANTLR 不会在 Sourcefolder 中生成包,它只生成带有包声明的类文件。所以你必须在包中生成它们:

这是一个 pom 示例:

<plugin>

                <groupId>org.antlr</groupId>

                <artifactId>antlr4-maven-plugin</artifactId>

                <version>4.7.1</version>

                <configuration>

                    <outputDirectory>src/main/java/net/site/antlr</outputDirectory>

                </configuration>

                <executions>

                    <execution>

                        <goals>

                            <goal>antlr4</goal>

                        </goals>

                    </execution>

                </executions>

            </plugin>

如果将其添加到 g 文件中:


@header {

    package net.site.antlr;

}

但使用此解决方案,您无法在不同的包中生成不同的语法。


查看完整回答
反对 回复 2023-07-28
  • 1 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信