My project generates source code using the XTC parser generator
(http://cs.nyu.edu/rgrimm/xtc/). XTC doesn't have a Maven plugin that
I'm aware of, so I'm trying to build the parser using an Ant Java
task, like so:

      <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>

The details of what XTC does aren't important: the end result is that
the above generates Dot.java and places it in
target/generated-sources/main/java. It works fine.

The problem is that, with this plugin element in my pom.xml, none of
the Java files in the project get compiled. In a project generated
using "mvn archetype:create -DgroupId=foo -DartifactId=bar", if I run
"mvn compile" without the plugin element, I get:

$ 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] ------------------------------------------------------------------------

Whereas with the plugin element invoking XTC, I get (after a "mvn clean"):

$ 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 ...

The XTC process is not failing, AFAICT.

I've tried other kinds of Ant tasks and they don't interfere with Java
compilation. For example, if I replace the task element above with an
echo task

              <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>

I get

$ 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] ------------------------------------------------------------------------

Obviously there's something I'm not understanding about how Maven
executes the java task. Is there something simple that I'm doing
wrong? Is there an alternative way to accomplish this task that I
should try (perhaps a more "Maven-native" way)?

The full pom.xml is attached.

Regards,
Chris
<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/maven-v4_0_0.xsd";>
  <modelVersion>4.0.0</modelVersion>
  <groupId>foo</groupId>
  <artifactId>bar</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>bar</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>xtc</groupId>
      <artifactId>xtc</artifactId>
      <version>1.14.2</version>
      <scope>system</scope>
      <systemPath>${basedir}/lib/xtc.jar</systemPath>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <!--  Run Rats! on some files -->
      <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>
                <!-- <echo file="${project.build.directory}/generated-sources/main/java/Dot.java"> -->
                <!--   public class Dot { } -->
                <!-- </echo> -->
              </tasks>
              <sourceRoot>
                ${project.build.directory}/generated-sources/main/java
              </sourceRoot>
            </configuration>            
            <goals> 
              <goal>run</goal> 
            </goals> 
          </execution>
        </executions> 
      </plugin> 
    </plugins> 
  </build> 
</project>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to