在Maven中封装Ant-JAVA_HOME指向JRE,但仅适用于Ant



我有一个Ant项目,它自己构建得很好。我现在正试图将它封装在一个Maven构建中,该构建将使用maven-antrun-plugin启动Ant构建。当我这样做时,构建失败,我得到了这个错误,

[ERROR] C:Usersbobbyworkspacelibrariesbuild-targetscommon-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:Javajdk1.8.0_65jre"

关于这个错误有很多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:Javajdk1.8.0_65

错误中提到的文件来自我的工作维护的一个库,我们保存了所有的Jars。在这个文件中,这是第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行。

这是一个常见问题。尝试使用此配置:

<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子目录来计算其java.home,如图所示。因此,Ant所需的东西在jre目录中根本不可用。

然而,这种配置可以确保Ant的插件依赖关系得到正确满足。

您需要指向JDK而不是JRE。只要消除愤怒并尝试。

It is currently set to "C:Javajdk1.8.0_65jre"

如果你的JDK已经设置好了——另一个解决方法——你能把tools.jar从JDK-lib复制到jre-lib,看看它是否有效吗。

相关内容

  • 没有找到相关文章

最新更新