プロジェクトでRats! parser generatorを使用してソースコードが生成されます。ラット!私の知るMavenプラグインを持っていないので、私はそうのように、AntのJavaの タスクを使用してパーサを構築しようとしている:どのようなラットのMaven:Antタスクの後にJavaクラスがコンパイルされない
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<configuration>
<tasks>
<mkdir dir="${project.build.directory}/generated-sources/main/java/" />
<java classpath="lib/xtc.jar" classname="xtc.parser.Rats">
<arg line="-in ${project.build.sourceDirectory}" />
<arg line="-out ${project.build.directory}/generated-sources/main/java/" />
<arg path="${project.build.sourceDirectory}/Dot.rats" />
</java>
</tasks>
<sourceRoot>
${project.build.directory}/generated-sources/main/java
</sourceRoot>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
詳細を!それは重要ではありません:最終結果は 上記はDot.java
を生成し、それを target/generated-sources/main/java
に置きます。それはうまく動作します。
このplugin
要素が私のpom.xml
にあり、 のどれもプロジェクトのJavaファイルがコンパイルされません。
私は「mvn archetype:create -DgroupId=foo -DartifactId=bar
」を使ってプロジェクト を生成し、 ファイルsrc/main/java/Dot.rats
追加:「私が実行した場合
module Dot;
public void Dot = "." !_ ;
(これは、単一のドットを持つファイルのみを受け入れる文法である。)
をmvn compile
"plugin
要素なしで、私が手:
$ mvn compile
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building bar
[INFO] task-segment: [compile]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
[INFO] Compiling 1 source file to
/home/chris/src/tests/maven/project1/bar/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Wed Jul 01 18:57:08 EDT 2009
[INFO] Final Memory: 6M/67M
[INFO] ------------------------------------------------------------------------
コンパイルされる1つのJavaファイルがsrc/main/java/foo/App.java
である場合、アーキタイプによって作成されたJavaクラス(つまり、生成されたソースファイルではない)。
私は "mvn clean
" その後、ラットを呼び出すplugin
要素を追加しなければ!、私が手:
$ mvn compile
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building bar
[INFO] task-segment: [compile]
[INFO] ------------------------------------------------------------------------
[INFO] [antrun:run {execution: default}]
[INFO] Executing tasks
[mkdir] Created dir:
/home/chris/src/tests/maven/project1/bar/target/generated-sources/main/java
Rats! Parser Generator, v. 1.14.2, (C) 2004-2008 Robert Grimm
Processing /home/chris/src/tests/maven/project1/bar/src/main/java/Dot.rats ...
はすなわち、Mavenはラットを実行しています! (AFAICTは失敗していませんが)のいずれかの Javaクラスをコンパイルせず、既存のクラスApp.java
も含めません。実行後、私はtarget/generated-sources/main/java/Dot.java
を持っていますが、target/classes
はありません。
私は他の種類のAntタスクを試しましたが、Java のコンパイルに干渉しません。私は エコータスク
<tasks>
<mkdir dir="${project.build.directory}/generated-sources/main/java/" />
<echo file="${project.build.directory}/generated-sources/main/java/Dot.java">
public class Dot { }
</echo>
</tasks>
して上でタスクエレメントを交換する場合たとえば、私は
$ mvn compile
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building bar
[INFO] task-segment: [compile]
[INFO] ------------------------------------------------------------------------
[INFO] [antrun:run {execution: default}]
[INFO] Executing tasks
[INFO] Executed tasks
[INFO] Registering compile source root
/home/chris/src/tests/maven/project1/bar/target/generated-sources/main/java
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
[INFO] Compiling 2 source files to
/home/chris/src/tests/maven/project1/bar/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Wed Jul 01 19:03:34 EDT 2009
[INFO] Final Memory: 7M/79M
[INFO] ------------------------------------------------------------------------
が明らかにMavenの がjava
タスクを実行方法については、私は理解していないよ何かがあります取得します。私がやっている簡単なことがありますか 間違っていますか?私が (おそらくもっと "Maven-native"のやり方)を試みるべきであるというこの作業を達成する別の方法がありますか?
[UPDATE]面白い話。それはラットを実行します:私は、それはまったく同じことを行い、直接xtc.parser.Rats
を呼び出すRatsMojo
クラスを書いて、
<plugin>
<groupId>edu.nyu.xtc</groupId>
<artifactId>maven-xtc-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>rats</goal>
</goals>
<configuration>
<inputDirectory>${project.build.sourceDirectory}</inputDirectory>
<outputDirectory> ${project.build.directory}/generated-sources/main/java</outputDirectory>
<grammarFile>${project.build.sourceDirectory}/Dot.rats</grammarFile>
</configuration>
</execution>
</executions>
</plugin>
して上記plugin
要素を交換することにより、MavenプラグインとAntタスクを交換してみました!プロジェクト内のJavaファイルのをコンパイルせずに終了します。
私の質問ではっきりしていませんでした。それは* Javaファイルをコンパイルしていないことです。生成されたファイルではなく、そこにあったファイルではありません。 sourceRoot要素は、生成されたソースディレクトリをコンパイルパスに追加します(たとえば、生成されたファイルはエコーの例でコンパイルされます)。 –
私はこのプラグイン構成を追加しようとしましたが、何も変更していないことを付け加えてください:まだJavaコンパイルはありません。 –