2

Maven ビルドの最初のステップとして ANTLR4 文法をコンパイルするにはどうすればよいですか?

*.g4 ファイルから手動で文法を作成するのは非常に簡単です。Linux ではjava -jar /usr/local/lib/antlr-4.0-complete.jar grammarName.g4、コンソールから実行するだけです。これにより、ビルドの次のステップでコンパイルする必要があるいくつかの Java ファイルが作成されます。

maven にすべての *.g4 ファイルを見つけてから、それらのすべてに対して上記のコマンドを実行し、さらにビルドを続行するように指示することは可能ですか? 文法のコンパイルが失敗すると、ビルドも失敗するはずです。

または、このタスクに対処できるプラグインはありますか?

私はすでにこの回答を見てきました - 欠点はIDEに依存することです。ビルドをできる限り IDE とシステムに依存しないようにしたい (Netbeans を使用しているため、与えられた答えは受け入れられない)。

編集

ベンゾニコの提案を試してみました。他の回答から参照されている pom.xml にリストされている依存関係を追加しました。私の 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>pl.kajman</groupId>
<artifactId>antlr-sandbox</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>antlr-sandbox</name>
<url>http://maven.apache.org</url>

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

<dependencies>
    <dependency>
        <groupId>org.antlr</groupId>
        <artifactId>antlr4-maven-plugin</artifactId>
        <version>4.0</version>
    </dependency>
    <dependency>
        <groupId>com.tunnelvisionlabs</groupId>
        <artifactId>antlr4-runtime</artifactId>
        <version>4.0</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.tunnelvisionlabs</groupId>
        <artifactId>antlr4</artifactId>
        <version>4.0</version>
        <classifier>complete</classifier>
    </dependency>
</dependencies>
<build>
    <sourceDirectory>src</sourceDirectory>
    <outputDirectory>bin</outputDirectory>

    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.0</version>
            <configuration>
                <source>6</source>
                <target>6</target>
                <showWarnings>true</showWarnings>
                <showDeprecation>true</showDeprecation>
                <compilerArguments>
                    <Xlint />
                </compilerArguments>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.7</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>add-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>target/generated-sources/antlr4</source>
                        </sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>com.tunnelvisionlabs</groupId>
            <artifactId>antlr4-maven-plugin</artifactId>
            <version>4.0</version>
            <configuration>
                <sourceDirectory>src</sourceDirectory>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>antlr4</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Javaファイルはg4ファイルから自動生成されますが、残念ながらエラーが多いです。これらは、手動でコンパイルしたときにクラスパスが間違っていたものと非常によく似ています。エラーの一部は次のとおりです。

/home/kajman/projects/antlr/antlr-sandbox/target/generated-sources/antlr4/main/java/pl/kajman/antlr/sandbox/grammars/ExprListener.java:[6,56] type org.antlr.v4.runtime.tree.ParseTreeListener does not take parameters

/home/kajman/projects/antlr/antlr-sandbox/target/generated-sources/antlr4/main/java/pl/kajman/antlr/sandbox/grammars/ExprParser.java:[44,32] cannot find symbol
symbol:   method 
getRuleContexts(java.lang.Class<main.java.pl.kajman.antlr.sandbox.grammars.ExprParser.StatContext>)
location: class main.java.pl.kajman.antlr.sandbox.grammars.ExprParser.ProgContext
4

1 に答える 1

2

実際、あなたがあなたの質問で参照する投稿で提案された解決策は、antlr maven pluginあなたが必要とするものと完全に互換性のあるものを使用します。ソリューションの要点は、日食内でそれを使用できるようにすることですが、それが必要ない場合は、m2epluginManagementセッションで)話している要点の部分をスキップして、すぐに使用できますantlr maven plugin

プラグインのドキュメントをご覧ください

于 2013-03-09T12:44:36.410 に答える