【发布时间】:2012-11-29 16:33:42
【问题描述】:
我想在我的代码中使用 Ant 的一项任务 (scp)。有什么办法吗?
我是否应该简单地引用 Ant 的一个库并直接从我的代码中调用 API?
【问题讨论】:
我想在我的代码中使用 Ant 的一项任务 (scp)。有什么办法吗?
我是否应该简单地引用 Ant 的一个库并直接从我的代码中调用 API?
【问题讨论】:
是的,您可以很容易地从您的代码中调用 Ant 任务。
这是一个如何扩展 Ant 任务的示例:
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Target;
import org.apache.tools.ant.taskdefs.Copy;
public class MyCopyTask extends Copy {
public MyCopyTask() {
setProject(new Project());
getProject().init();
setTaskName("MyCopy");
setTaskType("MyCopy");
setOwningTarget(new Target());
}
}
以下是如何在您的代码中使用它:
MyCopyTask copier = new MyCopyTask();
copier.setFile(srcFile);
copier.setTofile(toFile);
copier.execute();
这里有更多信息:
【讨论】:
这肯定会在您的 Java 代码中包含 Ant 任务。作为最后的手段,我们以前曾这样做过。一个问题是你可能会设置一些 Ant 特定的属性(例如 setProject)来让任务真正工作。这可能会使其使用起来有点尴尬。此外,正如您所提到的,您可能需要 Ant 运行时库来运行它。
我的第一个建议是看看是否有一种方法可以直接调用您想要的实际 SCP 代码,而无需 Ant 开销。第二种选择是寻找 Java SCP 库或找出 Ant scp 任务正在使用什么。有关更多示例,请参阅scp via java。最后的建议是包含上述 Ant 任务。
【讨论】:
我认为调用系统调用会更简单:
try {
Runtime.getRuntime().exec("ant scpTask");
} catch (IOException e) {
e.printStackTrace();
}
【讨论】:
我认为Runtime.getRuntime().exec("ant deploy"); 取决于您的操作系统,如果您只是在一个固定的操作系统中运行它,这确实是一种更简单、更容易获得所需内容的方法。 :)
【讨论】: