在 Maven 中包装 Ant - JAVA_HOME 指向 JRE 但仅适用于 Ant
Wrapping Ant in Maven - JAVA_HOME points to the JRE but works with just Ant
我有一个可以自行构建的 Ant 项目。我现在正试图将它包装在 Maven 构建中,它将使用 maven-antrun-plugin
启动 Ant 构建。当我这样做时,构建失败并且出现此错误,
[ERROR] C:\Users\bobby\workspace\libraries\build-targets\common-targets.xml:170: 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:\Java\jdk1.8.0_65\jre"
有很多关于这个错误的 SOF 帖子,但我觉得我的是独一无二的,因为它只发生在我在 Maven 中包装 Ant 构建时,即,当我在同一个项目中时,我没有得到这个错误就说 $ ant build
.
这是我的 pom.xml 文件的一部分
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>process-resources</phase>
<configuration>
<tasks>
<ant antfile="build.xml" target="build" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>add-jar</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>build/bin/myWarFile.war</file>
<type>war</type>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
我的JAVA_HOME环境变量设置为C:\Java\jdk1.8.0_65
。
错误中提到的文件来自我的工作维护的库,我们保存所有 Jar。在该文件中,第 170
行是什么
<target name="compile-src">
<!-- Compile source -->
<javac srcdir="${java.src.dir}"
destdir="${class.dir}"
debug="${debug.flag}"
deprecation="${deprecation.flag}"
nowarn="${warnings.flag}"
optimize="off"
source="${source.value}">
<classpath refid="compile.classpath"/>
</javac>
</target>
来源为的那一行是第170行。
您需要指向 JDK 而不是 JRE。只需消除愤怒并尝试。
It is currently set to "C:\Java\jdk1.8.0_65\jre"
并且如果您的 JDK 已设置 - 另一种解决方法 - 您可以将 tools.jar 从 jdk lib 复制到 jre lib 并查看它是否有效。
这是一个常见问题。试试这个配置:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
...
<!-- Add this dependency to your ant-run configuration -->
<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>
...
</plugin>
Maven 使用Java的系统属性java.home
,不是与 环境变量 JAVA_HOME
相同,但它通过附加 jre
sub-directory 使用它来计算其 java.home
,如见证。因此,Ant 需要的东西在 jre
目录中根本不可用。
但是,此配置可确保正确满足 Ant 的插件依赖关系。
我有一个可以自行构建的 Ant 项目。我现在正试图将它包装在 Maven 构建中,它将使用 maven-antrun-plugin
启动 Ant 构建。当我这样做时,构建失败并且出现此错误,
[ERROR] C:\Users\bobby\workspace\libraries\build-targets\common-targets.xml:170: 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:\Java\jdk1.8.0_65\jre"
有很多关于这个错误的 SOF 帖子,但我觉得我的是独一无二的,因为它只发生在我在 Maven 中包装 Ant 构建时,即,当我在同一个项目中时,我没有得到这个错误就说 $ ant build
.
这是我的 pom.xml 文件的一部分
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>process-resources</phase>
<configuration>
<tasks>
<ant antfile="build.xml" target="build" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>add-jar</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>build/bin/myWarFile.war</file>
<type>war</type>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
我的JAVA_HOME环境变量设置为C:\Java\jdk1.8.0_65
。
错误中提到的文件来自我的工作维护的库,我们保存所有 Jar。在该文件中,第 170
行是什么<target name="compile-src">
<!-- Compile source -->
<javac srcdir="${java.src.dir}"
destdir="${class.dir}"
debug="${debug.flag}"
deprecation="${deprecation.flag}"
nowarn="${warnings.flag}"
optimize="off"
source="${source.value}">
<classpath refid="compile.classpath"/>
</javac>
</target>
来源为的那一行是第170行。
您需要指向 JDK 而不是 JRE。只需消除愤怒并尝试。
It is currently set to "C:\Java\jdk1.8.0_65\jre"
并且如果您的 JDK 已设置 - 另一种解决方法 - 您可以将 tools.jar 从 jdk lib 复制到 jre lib 并查看它是否有效。
这是一个常见问题。试试这个配置:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
...
<!-- Add this dependency to your ant-run configuration -->
<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>
...
</plugin>
Maven 使用Java的系统属性java.home
,不是与 环境变量 JAVA_HOME
相同,但它通过附加 jre
sub-directory 使用它来计算其 java.home
,如见证。因此,Ant 需要的东西在 jre
目录中根本不可用。
但是,此配置可确保正确满足 Ant 的插件依赖关系。