Maven generiert nur Antlr-Quellen im Standardpaket

8

Ich beginne mit meiner pom.xml:

%Vor%

Wenn ich maven install für dieses Projekt verwende, sollte maven die Quellen aus dem antilr4-Plugin im Paket wrb.grammar generieren, tut dies aber nicht. Es tut alles, aber legt die Quellen in diese Verzeichnisse, es bringt sie einfach in das, was es das "Standard-Paket" nennt, welches nur die Wurzel von antlr/generated-sources ist.

Wenn ich das Antlr4IDE-Plugin benutze, indem ich mit der rechten Maustaste auf die Grammatik klicke und sie unter Ausführen als auswähle, werden die Quellen im richtigen Verzeichnis erzeugt.

Eine andere Person, mit der ich in diesem kleinen Projekt arbeite, hat kein Problem mit maven-install . Neben unseren Betriebssystemen und Eclipse-Versionen ist alles gleich.

Ich benutze Eclipse Oxygen auf MacOS.

Was mache ich falsch, dass das Maven-Plugin mein gewünschtes Verzeichnis nicht erzeugt?

    
Meik Vtune 17.10.2017, 19:52
quelle

1 Antwort

2

Ich habe die Quellen von antlr4 Version 4.3 überprüft. Der Parameter -package wird nur von den Codegenerator-Vorlagen verwendet, aber nicht im tatsächlichen Werkzeugquellcode (siehe Github Suchergebnisse für genPackage ). Es kann also keinen Einfluss auf den Speicherort der Ausgabedateien haben.

Stattdessen wird der Speicherort jeder Ausgabedatei basierend auf dem Speicherort der entsprechenden Eingabedatei festgelegt (siehe hier und hier in den Quellen). Dies passt zu den Erklärungen in den maven plugin docs :

  

Wenn Ihre Grammatik Teil eines Pakets namens org.foo.bar sein soll, dann würden Sie es in das Verzeichnis src / main / antlr4 / org / foo / bar stellen. Das Plugin erzeugt dann .java und .tokens Dateien im Ausgabeverzeichnis target / generated-sources / antlr4 / org / foo / bar Wenn die Java Dateien kompiliert werden, befinden sie sich ohne spezielle Konfiguration am richtigen Ort für den Javac Compiler. Die generierten Java-Dateien werden automatisch vom Plugin zur Kompilierung übergeben.

Darüber hinaus ist es bei Verwendung des antilr4-maven-plugins nicht notwendig, die Option -package anzugeben. Da das Plugin den Wert des -package -Parameters aus dem Eingabedateipfad ableitet und automatisch zum Aufruf von antlr hinzufügt (siehe hier in den Quellen ). Das ist wahrscheinlich auch der Grund, warum -pacakge nicht direkt als Konfigurationsparameter im Maven-Plugin.

Lösung

Damit die generierten Dateien in einer Verzeichnisstruktur abgelegt werden, die Ihren Paketnamen entspricht, müssen Sie dieselbe Struktur für die Eingabedateien verwenden.

Im Wesentlichen müssen Sie nur Ihre Grammatikdateien in src/main/antlr4/wrb/grammar einfügen, den Parameter -package aus der Konfiguration entfernen und alles funktioniert wie erwartet.

Übrigens: anstatt zu schreiben

%Vor%

Du könntest einfach schreiben

%Vor%

seit dieser Parameter wird direkt vom antlr4-maven-plugin verstanden .

    
Christoph Böhme 25.10.2017, 19:28
quelle

Tags und Links