我的項目使用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
。它工作正常。
問題是,在我的pom.xml
中有這個plugin
元素, 項目中的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] ------------------------------------------------------------------------
正在編譯的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」)?
[更新]有趣的故事。我試圖用一個Maven插件替換Ant任務,通過編寫RatsMojo
類直接調用xtc.parser.Rats
與
<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
元素它不完全一樣的東西:它運行鼠!然後終止而不編譯項目中的Java文件的任何。
我不清楚我的問題:它不編譯任何* Java文件。不是生成的文件,也不是那裏開始的文件。 sourceRoot元素確實將生成的源目錄添加到編譯路徑中(例如,生成的文件在echo示例中得到編譯)。 – 2009-07-02 16:17:21