gpt4 book ai didi

eclipse - Maven仅在默认包中生成Antlr源

转载 作者:行者123 更新时间:2023-12-04 08:40:42 25 4
gpt4 key购买 nike

我将从pom.xml开始:

<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>HPK</groupId>
<artifactId>WRB</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>WRB</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4</artifactId>
<version>4.5.3</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>auto-clean</id>
<phase>initialize</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.antlr</groupId>
<artifactId>antlr4-maven-plugin</artifactId>
<version>4.3</version>
<executions>
<execution>
<configuration>
<arguments>
<argument>-visitor</argument>
<argument>-package</argument>
<argument>wrb.grammar</argument>
</arguments>
</configuration>
<id>antlr</id>
<goals>
<goal>antlr4</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings
only. It has no influence on the Maven build itself. -->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-clean-plugin
</artifactId>
<versionRange>
[3.0.0,)
</versionRange>
<goals>
<goal>clean</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore></ignore>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>

当我在此项目上运行 maven install时,maven应该从 wrb.grammar包内的antlr4插件生成源,但事实并非如此。它可以执行所有操作,但是将源放入这些目录中,只是将它们放在所谓的“默认包”中,这只是 antlr/generated-sources的根。

如果我通过右键单击语法并在运行方式下选择它来使用Antlr4IDE插件,则源代码将在正确的目录中生成。

我正在与这个小项目一起工作的另一个人使用 maven-install没问题。除了我们的操作系统和eclipse版本,其他所有内容都是相同的。

我在MacOS上使用Eclipse Oxygen。

Maven插件未生成所需目录,这是我做错了什么?

最佳答案

我已经检查了antlr4版本4.3的来源。 -package参数仅由代码生成器模板使用,而不在实际工具源代码中的任何位置使用(请参阅Github search results for genPackage )。因此,它不会影响输出文件的位置。

而是根据相应输入文件的位置确定每个输出文件的位置(请参见源文件中的herehere)。这符合maven plugin docs中的解释:

If your grammar is intended to be part of a package called org.foo.bar then you would place it in the directory src/main/antlr4/org/foo/bar. The plugin will then produce .java and .tokens files in the output directory target/generated-sources/antlr4/org/foo/bar When the Java files are compiled they will be in the correct location for the Javac compiler without any special configuration. The generated java files are automatically submitted for compilation by the plugin.



此外,使用antlr4-maven-plugin时,无需指定 -package选项。当插件从输入文件路径派生 -package参数的值并将其自动添加到antlr调用中时(请参阅 here in the sources)。这可能也是为什么Maven插件中无法直接将 -pacakge用作 configuration parameter的原因。

解决方案

为了将生成的文件放置在与包名称匹配的目录结构中,您需要对输入文件使用相同的结构。

本质上,您所需要做的就是将语法文件放在 src/main/antlr4/wrb/grammar中,从配置中删除 -package参数,一切按预期进行。

顺便说一句:而不是写作
<arguments>
<argument>-visitor</argument>
</arguments>

你可以简单地写
<visitor>true</visitor>

因为 this parameter被antlr4-maven-plugin直接理解。

关于eclipse - Maven仅在默认包中生成Antlr源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46798136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com