2

我想在我的代码中使用 Ant 的一项任务 (scp)。有什么办法吗?

我是否应该简单地引用 Ant 的库之一并直接从我的代码中调用 API?

4

4 回答 4

5

是的,您可以很容易地从您的代码中调用 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();

这里有更多信息:

于 2012-12-12T03:02:19.103 回答
0

这肯定会在您的 Java 代码中包含 Ant 任务。作为最后的手段,我们以前曾这样做过。一个问题是您可能会设置一些 Ant 特定的属性(例如 setProject)以使任务实际工作。这可能会使其使用起来有点尴尬。此外,正如您所提到的,您可能需要 Ant 运行时库来运行它。

我的第一个建议是看看是否有一种方法可以直接调用您想要的实际 SCP 代码,而无需 Ant 开销。第二种选择是寻找 Java SCP 库或找出 Ant scp 任务正在使用什么。有关更多示例,请参阅scp via java 。最后的建议是包含上述 Ant 任务。

于 2012-12-12T02:39:29.737 回答
0

我认为调用系统调用会更简单:

try {
            Runtime.getRuntime().exec("ant scpTask");
        } catch (IOException e) {
            e.printStackTrace();
        }
于 2012-12-12T02:39:32.060 回答
0

我认为Runtime.getRuntime().exec("ant deploy");取决于您的操作系统,如果您只是在一个固定的操作系统中运行它,这确实是一种更简单的方法来获得您想要的东西。:)

于 2012-12-12T02:49:22.327 回答