【问题标题】:specifying classpath for built-in ant tasks为内置的 ant 任务指定类路径
【发布时间】:2010-10-15 17:53:38
【问题描述】:

我在自定义 Ant 任务中使用 classpath 属性来告诉 Ant 在哪里可以找到外部任务 jar,但是对于内置任务我该如何做呢?

在我的情况下,我想确保 ant 使用我的 jsch.jar 副本来执行 scp 任务,而不是我已经安装在系统上的那个。有什么办法可以<scp> 同时保证它使用我的jsch.jar?

【问题讨论】:

    标签: java ant ssh


    【解决方案1】:

    如果您的 ant 调用使用 $ANT_HOME,您可以只为该 ant 调用使用特殊的 ANT_HOME 值到自定义 ant 安装,确保您的 $ANT_HOME/lib 包含 ant-jsch.jar 的正确副本。 请参阅此SO question 了解更多信息。

    【讨论】:

      【解决方案2】:

      我认为最好的方法是定义自己的任务,而不是搞乱预定义的任务。

      <taskdef name="myscp" class="..." classpath="jsch.jar"/>
      
      <myscp .../>
      

      【讨论】:

      • 感谢您的想法。我想我不确定&lt;myscp&gt; 任务的主体会发生什么。
      • 让我们退后一步。您提到系统上已经安装了 jsch.jar。它是如何安装的?
      • 我想将 jsch.jar 放在我的项目中(意味着 build.xml 的一些任意相对 URL),而不是将它放在 /usr/share/ant/lib 或我的 ant 路径中主目录。
      • 可以在本地.bashrc中加入下面一行 export CLASSPATH=$CLASSPATH:/path/to/jsch.jar 然后每次登录都会在classpath中。这行得通吗?
      • 是的,但它要求每个用户都这样做。我希望把它放在脚本中,这样任何签出项目的人都可以运行这个 ant 任务,而无需进一步设置。并非所有 ant 安装都有 jsch.jar(例如,Ubuntu 的默认 ant 包),所以我想提供它并强制在脚本中使用它。那好吧。 :(再次感谢。
      【解决方案3】:

      我遇到了完全相同的问题,这就是我所做的:使用 Google 的 Jar Jar 更改包名称。 这是我使用的 build.xml:

      <project name="Admin WAS Jython" default="jar">
      <target name="jar" >
          <taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask"
              classpath="jarjar-1.0.jar"/>
          <jarjar jarfile="dist/ant-jsch-copy.jar">
              <zipfileset src="ant-jsch.jar"/>
              <rule pattern="org.apache.tools.ant.taskdefs.optional.ssh.**" result="org.apache.tools.ant.taskdefs.optional.ssh.copy.@1"/>
          </jarjar>
      </target>
      

      然后在您的 ant 项目中使用以下内容:

      <taskdef name="scp2"
      classname="org.apache.tools.ant.taskdefs.optional.ssh.copy.Scp"
      classpath="ant-jsch-copy.jar;jsch-0.1.43.jar"/>
      

      并使用 scp2 任务而不是 scp

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-06
        • 2010-10-14
        • 1970-01-01
        • 2013-01-03
        相关资源
        最近更新 更多