我正在修改 Ant 脚本(当前在 MyEclipse 中使用)以从命令行工作。我这样做是为了让任何人都可以在没有 MyEclipse 的情况下签出项目并构建它。我遇到的问题是 MyEclipse 包含幕后的依赖项。它通过查看工作区的 Ant 配置并根据首选项对话框中选定的库编译类路径来完成此操作。长话短说,我需要使用这些依赖项并使脚本足够智能,以便在没有 MyEclipse 的帮助下自行包含它们。
让我头疼的任务是 sshexec 和 scp 任务。它们是可选的 ant 任务,需要某个版本的 jsch 才能运行。我从 MyEclipse 的 Ant 类路径中删除了 jsch,并将其添加到项目本身的 lib 文件夹(lib/dev)中。MyEclipse 立即抱怨 SSHExec 类找不到依赖类,com.jcraft.jsch.UserInfo
它是 jsch-0.1.44.jar 的一部分。
我看不到从构建脚本中为 Ant 设置类路径的方法。我有以下代码,它path
向脚本添加了一个元素,但我认为 Ant 不会使用它,除非明确关联到一个任务或另一个元素。
<path id="web-jars">
<fileset dir="${web-lib}">
<include name="**/*.jar" />
</fileset>
<fileset dir="${app-lib}"> <!-- this is where jsch resides -->
<include name="**/*.jar" />
</fileset>
</path>
看来我需要用来taskdef
定义 sshexec 和 scp 任务:
<taskdef name="sshexec" classname="org.apache.tools.ant.taskdefs.optional.ssh.SSHExec"
classpathref="web-jars"/>
MyEclipse 对此抱怨,"taskdef A class needed by class org.apache.tools.ant.taskdefs.optional.ssh.SSHExec cannot be found: com/jcraft/jsch/UserInfo"
它显然在 classpathref,web-jars 中。由于这个格式错误或配置错误的taskdef,我无法在脚本中运行任何东西。