Итак, этот вопрос старый, но я разработал другой подход, который может помочь другим. Мы можем вызвать Ant из задачи <java>
с правильным путем к классу для запуска <scp>
. Это позволяет избежать проблемы утечки classpath и не требует изменения установки Ant в любом случае:
<target name="sendfile">
<!-- file: local file to send -->
<!-- todir: remote directory -->
<java classname="org.apache.tools.ant.launch.Launcher"
fork="true" dir="${basedir}" taskname="ant+scp">
<classpath>
<pathelement location="/where/is/jsch-0.1.49.jar"/>
<pathelement location="${ant.home}/lib/ant-launcher.jar"/>
</classpath>
<arg value="-buildfile"/>
<arg file="${ant.file}"/>
<arg value="-Dfile=${file}"/>
<arg value="-Dtodir=${todir}"/>
<arg value="sendfile.scp"/>
</java>
</target>
<target name="sendfile.scp">
<echo message="Sending ${file} to ${todir}"/>
<property file="/tmp/passwordfile"/>
<scp file="${file}" todir="username@11.22.33.44:${todir}"
trust="true" port="22" password="${PASSWORD}"/>
</target>
Параметр port
не требуется, но он здесь как напоминание для пользовательских портов SSH. Пароль - это свойство, хранящееся в /tmp/passwordfile
, например PASSWORD=mysecretpassword
. Измените их в соответствии с вашими потребностями. Вот пример использования:
<ant target="sendfile">
<!-- Example: send /etc/os-release file to remote dir /home/myself -->
<property name="file" value="/etc/os-release"/>
<property name="todir" value="/home/myself"/>
</ant>