首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法将maven配置为查找antlr4生成的源文件

无法将maven配置为查找antlr4生成的源文件
EN

Stack Overflow用户
提问于 2019-09-14 02:52:58
回答 1查看 675关注 0票数 1

我正在试图弄清楚如何在antlr4中使用Maven,但一直没有找到任何可以完全正常工作的东西。我不是Maven专家。我从“明确的ANTLR4参考”第三章中的一个缩小的例子开始。我正在使用Windows10上的命令提示符控制台窗口。我最初试图使用Eclipse,但没有太多运气,所以我想我应该回到基础知识,并尝试命令提示符。

我在my-app/src/main/java/com/mycompany/app/App.java上有一个名为App.java的主要java文件

我的名为ArrayInit.g4的antlr4语法文件位于my-app/src/main/antlr4/ArrayInit.g4

从ArrayInit.g4生成的java文件(ArrayInitListener.java、ArrayInitParser.java等)在键入"mvn antrl4:antlr4“之后,它位于my-app/target/generated-sources/antlr4

我现在的问题是,如何设置我的pom.xml文件,以便在编译App.java时,它可以编译并包含生成的antlr4 java文件。我一直在尝试为pom配置不同的源、输出、目标目录,但都没有成功。

这是我的语法文件ArrayInit.g4 -

代码语言:javascript
运行
复制
grammar ArrayInit;

init : '{' value (',' value)* '}' ;

value : init
        | INT
        ;

INT : [0-9]+ ;
WS : [ \t\r\n]+ -> skip ;

这是我的主要java文件App.java -

代码语言:javascript
运行
复制
package com.mycompany.app;

import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;

public class App 
{
    public static void main( String[] args ) throws Exception
    {       
        ANTLRInputStream input = new ANTLRInputStream(System.in);

        ArrayInitLexer lexer = new ArrayInitLexer(input);
    }
}

这是我的pom.xml文件-

代码语言:javascript
运行
复制
<?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">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>my-app</name>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.release>11</maven.compiler.release>
  </properties>

  <dependencies>
    <dependency>
        <groupId>org.antlr</groupId>
        <artifactId>antlr4-runtime</artifactId>
        <version>4.7.2</version>
    </dependency>
    <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.12</version>
         <scope>test</scope>
    </dependency>

  </dependencies>

  <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.antlr</groupId>
                    <artifactId>antlr4-maven-plugin</artifactId>
                    <version>4.7.2</version>
                    <executions>
                        <execution>
                            <id>antlr</id>
                            <goals>
                                <goal>antlr4</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                </plugin>
            </plugins>
        </pluginManagement>
  </build>
</project>

这是我尝试运行mvn编译时的错误消息-

代码语言:javascript
运行
复制
E:\mvnbael\my-app>mvn compile
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.mycompany.app:my-app >----------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ my-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\mvnbael\my-app\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ my-app ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to E:\mvnbael\my-app\target\classes
[INFO] /E:/mvnbael/my-app/src/main/java/com/mycompany/app/App.java: E:\mvnbael\my-app\src\main\java\com\mycompany\app\App.java uses or overrides a deprecated API.
[INFO] /E:/mvnbael/my-app/src/main/java/com/mycompany/app/App.java: Recompile with -Xlint:deprecation for details.
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /E:/mvnbael/my-app/src/main/java/com/mycompany/app/App.java:[20,17] cannot find symbol
  symbol:   class ArrayInitLexer
  location: class com.mycompany.app.App
[ERROR] /E:/mvnbael/my-app/src/main/java/com/mycompany/app/App.java:[20,44] cannot find symbol
  symbol:   class ArrayInitLexer
  location: class com.mycompany.app.App
[INFO] 2 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.240 s
[INFO] Finished at: 2019-09-13T11:07:21-07:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project my-app: Compilation failure: Compilation failure:
[ERROR] /E:/mvnbael/my-app/src/main/java/com/mycompany/app/App.java:[20,17] cannot find symbol
[ERROR]   symbol:   class ArrayInitLexer
[ERROR]   location: class com.mycompany.app.App
[ERROR] /E:/mvnbael/my-app/src/main/java/com/mycompany/app/App.java:[20,44] cannot find symbol
[ERROR]   symbol:   class ArrayInitLexer
[ERROR]   location: class com.mycompany.app.App
EN

回答 1

Stack Overflow用户

发布于 2020-09-15 23:30:23

正如评论所说,为了让pom.xml作为generate-sources的一部分自动运行<pluginManagement>,我必须从Maven中删除ANTLR。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57928955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档