我的所有项目及其版本都在一个属性文件中定义,如下所示:
ProjectNameA=0.0.1
ProjectNameB=1.4.2
Run Code Online (Sandbox Code Playgroud)
我想迭代所有项目,并在Ant脚本中使用它们的名称和版本.
目前我使用属性任务读取整个文件,然后在for循环中遍历给定列表,如下所示:
<for list="ProjectNameA,ProjectNameB" param="project">
<sequential>
<echo message="@{project} has version ${@{project}}" />
</sequential>
</for>
Run Code Online (Sandbox Code Playgroud)
如何避免for循环中项目名称的硬编码?基本上迭代每一行,并在我去的时候提取项目的名称和版本.
当我运行我的Ant构建时,它失败并出现以下异常:
Unexpected element "{}target" {antlib:org.apache.tools.ant}target
Run Code Online (Sandbox Code Playgroud)
我正在使用Eclipse 3.4.2.
请让我知道我在这里缺少什么.
假设我有一些Ant任务 - 比如说javac或junit - 如果任一任务失败,我想执行一个任务,但如果他们成功,我就不会.
知道怎么做吗?
是否可以通过简单的shell命令仅保留一行的最后10行?
tail -n 10 test.log
Run Code Online (Sandbox Code Playgroud)
提供正确的结果,但我不知道如何修改test.log本身.和
tail -n 10 test.log > test.log
Run Code Online (Sandbox Code Playgroud)
不起作用.
如何使用Ant解压缩特定文件夹?
具体来说,我已经下载了apache-tomcat-6.0.29.zip,其中包含文件夹"apache-tomcat-6.0.29".我希望Ant解压缩"apache-tomcat-6.0.29"下的所有内容,但不要在层次结构顶部包含"apache-tomcat-6.0.29".
我尝试了很多东西,但我似乎无法让它发挥作用.
这是我最近的尝试:
<unzip dest="${release.dir}/image/tomcat" src="${tomcat.zip}">
<patternset>
<include name="apache-tomcat-6.0.29/*"/>
</patternset>
</unzip>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
如果用户允许,我想覆盖Windows机器上的hosts文件:
<input message="Do you want to overwrite the HOSTS file?"
addproperty="overwrite.hosts" validargs="yes,no" />
<copy tofile="${env.WINDIR}/system32/drivers/etc/hosts.backup">
<fileset file="${env.WINDIR}/system32/drivers/etc/hosts" />
</copy>
<copy todir="${env.WINDIR}/system32/drivers/etc">
<fileset file="${trainer.dir}/hosts" />
</copy>
Run Code Online (Sandbox Code Playgroud)
仅当用户说"是"时,我该如何处理副本?
编辑:
我试过这个:
<input message="Do you want to overwrite the HOSTS file?" addproperty="overwrite.hosts" validargs="yes,no" />
<if>
<equals arg1="${overwrite.hosts}" arg2="yes" />
<then>
<copy tofile="${env.windir}/system32/drivers/etc/hosts.backup">
<fileset file="${env.windir}/system32/drivers/etc/hosts">
</fileset>
</copy>
<copy todir="${env.windir}/system32/drivers/etc">
<fileset file="${trainer.dir}/hosts">
</fileset>
</copy>
</then>
</if>
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
C:\trainer\build.xml:16: Problem: failed to create task or type if
Cause: The name is undefined.
Action: Check the spelling.
Action: …
Run Code Online (Sandbox Code Playgroud) 我有一个要求:将本地文件复制到远程系统.我做了以下事情:
我的构建文件是:
<project name="ImportedBuild" default="all">
<target name="copyFileToRemote">
<echo>2222222222 copyFileToRemote Examples:::::::::::::</echo>
<scp file="sample.txt" todir="${username}:${password}@${hostname}:/shared"/>
</target>
</project>
Run Code Online (Sandbox Code Playgroud)
当我运行Ant时,我收到此错误:
BUILD FAILED com.jcraft.jsch.JSchException: reject HostKey: 10.184.74.168
at com.jcraft.jsch.Session.checkHost(Session.java:712)
at com.jcraft.jsch.Session.connect(Session.java:313)
at com.jcraft.jsch.Session.connect(Session.java:154)
at org.apache.tools.ant.taskdefs.optional.ssh.SSHBase.openSession(SSHBase.java:212)
at org.apache.tools.ant.taskdefs.optional.ssh.Scp.upload(Scp.java:291)
at org.apache.tools.ant.taskdefs.optional.ssh.Scp.execute(Scp.java:203)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
... etc ...
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决这个问题?
我想删除包含特定关键字的文本文件中的所有行.
到目前为止我只发现:
<linecontains>
<contains value="assert"/>
</linecontains>
Run Code Online (Sandbox Code Playgroud)
但我不知道如何删除这些行.
我想用时间戳重命名我的应用程序文件夹,然后使用相同的文件夹名称解压缩我的应用程序的较新版本.使用Ant (move
任务),看起来您可以将内容从一个文件夹移动到另一个文件夹.
这是我在Ant中做到这一点的唯一方法吗?
有没有一种完善的方式在项目之间共享Ant目标?我目前有一个解决方案,但它有点不优雅.这是我到目前为止所做的.
我ivy-tasks.xml
的网络服务器上有一个名为托管的文件.此文件包含用于管理与Ivy的项目依赖关系的样板任务.例如:
<project name="ant-ivy-tasks" default="init-ivy"
xmlns:ivy="antlib:org.apache.ivy.ant">
...
<target name="ivy-download" unless="skip.ivy.download">
<mkdir dir="${ivy.jar.dir}"/>
<echo message="Installing ivy..."/>
<get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
dest="${ivy.jar.file}" usetimestamp="true"/>
</target>
<target name="ivy-init" depends="ivy-download"
description="-> Defines ivy tasks and loads global settings">
<path id="ivy.lib.path">
<fileset dir="${ivy.jar.dir}" includes="*.jar"/>
</path>
<taskdef resource="org/apache/ivy/ant/antlib.xml"
uri="antlib:org.apache.ivy.ant"
classpathref="ivy.lib.path"/>
<ivy:settings url="http://myserver/ivy/settings/ivysettings-user.xml"/>
</target>
...
</project>
Run Code Online (Sandbox Code Playgroud)
这个文件被托管的原因是因为我不希望:
我在项目的build.xmls中对此文件的处理方式如下:
<property name="download.dir" location="download"/>
<mkdir dir="${download.dir}"/>
<echo message="Downloading import files to ${download.dir}"/>
<get src="http://myserver/ivy/ivy-tasks.xml" dest="${download.dir}/ivy-tasks.xml" usetimestamp="true"/>
<import file="${download.dir}/ivy-tasks.xml"/>
Run Code Online (Sandbox Code Playgroud)
关于这一点的"脏"部分是我必须在 …