Rob McFeely
Rob McFeely

Reputation: 3033

Maven Ant BuildException with maven-antrun-plugin ... unable to find javac compiler

I'm trying to make Maven call an ANT build for some legacy code. The ant build builds correctly through ant. However when I call it using the maven ant plugin, it fails with the following error:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.6:run      (default) on project CoreServices: An Ant BuildException has occured: The following error occurred while executing this line:
[ERROR] C:\dev\projects\build\build.xml:158: The following error occurred while executing this line:
[ERROR] C:\dev\projects\build\build.xml:62: The following error occurred while executing this line:
[ERROR] C:\dev\projects\build\build.xml:33: The following error occurred while executing this line:
[ERROR] C:\dev\projects\ods\build.xml:41: Unable to find a javac compiler;
[ERROR] com.sun.tools.javac.Main is not on the classpath.
[ERROR] Perhaps JAVA_HOME does not point to the JDK.
[ERROR] It is currently set to "C:\bea\jdk150_11\jre"

My javac exists at C:\bea\jdk150_11\bin and this works for all other things. Im not sure where Maven is getting this version of JAVA_HOME. JAVA_HOME in windows environmental variables is set to C:\bea\jdk150_11\ as it should be.

The Maven code that I'm using to call the build.xml is

<build>
   <plugins>
    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-antrun-plugin</artifactId>
     <version>1.6</version>

     <executions>
          <execution>
            <phase>install</phase>
            <configuration>

              <target>
    <ant antfile="../build/build.xml" target="deliver" >
    </ant>
              </target>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
    </plugin>
   </plugins>
  </build>

Upvotes: 15

Views: 55737

Answers (2)

Panini Luncher
Panini Luncher

Reputation: 649

I have the same problem as the OP!

  1. Executing the ant target to compile via Eclipse IDE = success
  2. Executing the same ant target via command console = success
  3. Executing maven ant plugin to execute this ant target = FAILED with same error

Solution: In the ant <javac> command, set its flag: fork=yes

<target name="compileJava">
    <javac destdir="${dir.build}"
           fork="yes" 
           includeantruntime="false"
           debug="true"
           failonerror="true">
        //...
    </javac>
</target>

REF: link

Upvotes: 0

Lukasz
Lukasz

Reputation: 7662

First thing: Why do you execute your ANT script in install phase and not in compile?

The second thing: Your problem may be caused by the fact that Maven executes JRE instead of JDK, despite the fact that your JAVA_HOME points to JDK. To fix this see you have to manually adjust dependencies for maven-antrun-plugin. This is just an example:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.6</version>
    <dependencies>
        <dependency>
            <groupId>com.sun</groupId>
            <artifactId>tools</artifactId>
            <version>1.5.0</version>
            <scope>system</scope>
            <systemPath>${java.home}/../lib/tools.jar</systemPath>
        </dependency>
    </dependencies>
    <executions>
        <execution>
            <phase>compile</phase>
            <configuration><target><ant/></target></configuration>
            <goals><goal>run</goal></goals>
        </execution>
    </executions>
</plugin>

Upvotes: 22

Related Questions