ant常见问题

如何通过scp将指定文件上传到服务器

主要使用scp任务,需要先下载jsch的jar包,例子如下:

1
2
3
<target name="scp.war">
<scp localFile="a.war" remoteTofile="remoteuser@remoteHost:/path/to/a.war" password="password"/>
</target>

然后运行:

1
ant -lib jsch-xxx.jar scp.war

正常会报一个Unknown host的错误,主要是因为目标机器在本机上没有finger,可通过以下方法解决:利用某台linux服务器,向目标机器发送ssh登录命令,然后在~/.ssh目录下把known_hosts文件中关于目标机器的信息串copy到本地的用户目录下的.ssh目录中的known_hosts文件中,windows下创建.ssh目录需要在命令行执行mkdir .ssh命令


利用pom.xml做依赖管理,使用ant下载依赖包

背景:构建服务器无法连通外网,也没有maven的私服,但又想使用pom.xml做包依赖管理
解决思路:通过maven-ant-tasks把依赖包下载到项目里
具体方法:

  • 下载maven-ant-tasks.jar放到本地,具体下载地址请见 http://maven.apache.org/ant-tasks/
  • build.xml中引入相关task
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <project xmlns:artifact="antlib:org.apache.maven.artifact.ant">
    <property name="maven-ant-jar.path" value="path/to/maven-ant-tasks.jar"/>
    <path id="maven-ant-tasks.classpath" path="${maven-ant-jar.path}"/>
    <typedef resource="org/apache/maven/artifact/ant/antlib.xml"
    uri="antlib:org.apache.maven.artifact.ant"
    classpathref="maven-ant-tasks.classpath"/>
    <!-- usescope 属性有包含关系,关系如下:
    compile - Includes scopes compile, system and provided
    runtime - Includes scopes compile and runtime
    test - Includes scopes system, provided, compile, runtime and test
    -->
    <artifact:dependencies filesetId="dependency.main.fileset" usescope="runtime">
    <pom file="pom.xml"/>
    </artifact:dependencies>
    <!-- scopes属性没有包含关系,需要显式指定包含的范围 -->
    <artifact:dependencies filesetId="dependency.test.fileset" scopes="test">
    <pom file="pom.xml"/>
    </artifact:dependencies>
    <target name="jars.update">
    <copy todir="${lib.main.dir}">
    <fileset rerid="dependency.main.fileset"/>
    <mapper type="flatten"/>
    </copy>
    <copy todir="${lib.test.dir}">
    <fileset rerid="dependency.test.fileset"/>
    <mapper type="flatten"/>
    </copy>
    </target>
    </project>