gpt4 book ai didi

java - 在 Java 中以编程方式执行 ANT 脚本

转载 作者:行者123 更新时间:2023-12-01 15:37:46 25 4
gpt4 key购买 nike

我在 eclipse 中构建了一个 swing gui,它应该运行一堆以前开发的代码,其中一部分涉及运行 ant 来构建代码。当我在 GUI 之外(在原始项目中)运行任何脚本时,ant 会正确执行并构建项目。但是,当我尝试以编程方式运行 ant 时,它会抛出错误,看起来该项目没有必要的 .jar。下面列出了代码、build.xml 顶部和错误。

代码块

File buildFile = new File("lib\\ePlay\\build.xml");
Project p = new Project();
p.setUserProperty("ant.file", buildFile.getAbsolutePath());
DefaultLogger consoleLogger = new DefaultLogger();
consoleLogger.setErrorPrintStream(System.err);
consoleLogger.setOutputPrintStream(System.out);
consoleLogger.setMessageOutputLevel(Project.MSG_INFO);
p.addBuildListener(consoleLogger);

try {
p.fireBuildStarted();
p.init();
ProjectHelper helper = ProjectHelper.getProjectHelper();
p.addReference("ant.projectHelper", helper);
helper.parse(p, buildFile);
p.executeTarget(p.getDefaultTarget());
p.fireBuildFinished(null);
} catch (BuildException e) {
p.fireBuildFinished(e);
}

构建.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="EPlay" xmlns:ivy="antlib:org.apache.ivy.ant" default="resolve">

<dirname file="${ant.file}" property="ant.dir" />
<property name="scm.user" value="scmrel"/>
<property name="scm.user.key" value="/.ssh/scmrel/id_rsa"/>
<property name="ivy.jar" value="ivy-2.0.0.jar" />
<property name="ivy.settings.dir" value="${ant.dir}/ivysettings" />
<property name="VERSION" value="LATEST" />
<property name="tasks.dir" value="${ant.dir}/.tasks" />
<property name="deploy.dir" value="${ant.dir}/deploy" />
...
<!-- retrieve the dependencies using Ivy -->
<target name="resolve" depends="_loadantcontrib,_getivy" description=" retrieve the dependencies with Ivy">
<ivy:settings file="${ivy.settings.dir}/ivysettings.xml" />
<ivy:resolve file="${ant.dir}/ivy.xml" transitive="false" />
<ivy:retrieve pattern="${deploy.dir}/[conf]/[artifact].[ext]"/>
</target>

还有错误

resolve:
BUILD FAILED
H:\eclipse\CLDeploySwing\lib\ePlay\build.xml:66: Problem: failed to create task or type antlib:org.apache.ivy.ant:settings
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.
No types or tasks have been defined in this namespace yet

This appears to be an antlib declaration.
Action: Check that the implementing library exists in one of:
-ANT_HOME\lib
-the IDE Ant configuration dialogs


Total time: 0 seconds

我检查了我的 ant 安装,似乎一切都在那里。正如我所说,如果 build.xml 在此应用程序之外运行,则原始项目将成功构建。

最佳答案

我建议这是原因,因为你的java程序没有与正常的ant构建相同的类路径,因此ANT_HOME不是正确的。

您可以通过将正确的环境变量传递到 JVM 中,或者简单地调用 System.getProperty("ANT_HOME") 来查看 ANT_HOME 实际所在的位置,以确保这是正确的。

关于java - 在 Java 中以编程方式执行 ANT 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8618336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com