我想在我的代码中使用 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");
取决于您的操作系统,如果您只是在一个固定的操作系统中运行它,这确实是一种更简单的方法来获得您想要的东西。:)