私のプロジェクトは、 Rats!を使用してソース コードを生成します。パーサージェネレーター。ネズミ!私が認識している 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
。それは正常に動作します。
問題は、 my のこの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 クラスです (つまり、生成されたソース ファイルではありません)。
" " を実行してから、 Rats! を呼び出す要素を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 は Rats を実行しています。(これは失敗ではありません、AFAICT)が、既存のクラスでさえも、JavaクラスをコンパイルしてApp.java
いません。走った後、私は持っていますtarget/generated-sources/main/java/Dot.java
が、ありませんtarget/classes
。
私は他の種類の Ant タスクを試しましたが、それらは Java コンパイルを妨げません。たとえば、上記の task 要素を echo タスクに置き換えると
<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 ネイティブな」方法)?
【追記】おかしな話。AntタスクをMavenプラグインに置き換えてみました。直接RatsMojo
呼び出すクラスを作成し、上記の要素をxtc.parser.Rats
plugin
<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>
それはまったく同じことをします: Rats を実行します! その後、プロジェクト内の Java ファイルをコンパイルせずに終了します。