使用ANT,如何在尝试删除目录之前确保该目录存在?
作为我目前清洁任务的一部分,我
<target name="clean" description="clean">
<delete dir="${build}" />
<delete dir="${bin}" />
<delete dir="${dist}/myrunner.${version}.jar" />
<delete dir="${doc}" />
<delete dir="${report}" />
</target>
Run Code Online (Sandbox Code Playgroud)
这很好用,但是(很明显)当有东西要删除时会发生删除.
使用ANT,如何检查目录是否存在?
我正在使用Ant构建脚本来整理基于Eclipse的应用程序以进行分发.
构建的一个步骤是检查构建文件夹中是否存在正确的库.我目前使用Ant命令.不幸的是,每次切换到新的Eclipse构建时我都必须修改脚本(因为版本号会更新).
我不需要检查版本号,我只需要检查文件是否存在.
那么,我该如何检查:
org.eclipse.rcp_3.5.0.*
Run Code Online (Sandbox Code Playgroud)
代替:
org.eclipse.rcp_3.5.0.v20090519-9SA0FwxFv6x089WEf-TWh11
Run Code Online (Sandbox Code Playgroud)
用Ant?
欢呼,伊恩
在ant中,我如何检查是否存在一组文件(以逗号分隔的路径列表)?
例如,我需要检查列出的所有路径是否myprop存在,如果是,我想设置属性pathExist:
<property name="myprop" value="path1,path2,path3"/>
Run Code Online (Sandbox Code Playgroud)
因此,在示例中,所有path1 path2 path3必须存在以设置pathExist为true,否则false.
我发现对于单个资源我可以使用该resourceexist任务,但我无法弄清楚如何使用逗号分隔的路径列表.
如何检查一组路径的存在?谢谢!
可能重复:
Ant任务检查文件是否存在?
如何在目录中存在文件,如果不在另一个位置使用另一个文件,如何检查文件是否存在.我尝试了以下但不能帮助我想要的东西.有人可以帮忙吗?
<condition property="somefile.available">
<or>
<available file="/home/doc/somefile"/>
<and>
<available file="/usr/local/somefile" />
</and>
</or>
</condition>
Run Code Online (Sandbox Code Playgroud) 我的任务是为Ant构建脚本创建自动通知.这样,当有人推出部署时,我们的团队可以自动收到有关它的电子邮件.
显而易见的选择是使用Ant的邮件任务,该任务是使用Ant预定义的:
<target name="notify" description="notify team">
<mail subject="latest deployment">
<from address="me@gmail.com" />
<to address="jimmy@yahoo.com" />
<message>A new build has been pushed out to prod</message>
</mail>
</target>
Run Code Online (Sandbox Code Playgroud)
但是,这会导致以下运行时异常:
java.lang.ClassNotFoundException: javax.mail.internet.MimeMessage
Run Code Online (Sandbox Code Playgroud)
这是因为Ant的邮件任务依赖于JavaMail和JavaBeans Activation Framework,这些库显然不包含在其发行版中.为什么Ant会定义依赖于库但不包含该库的任务我不清楚.
此帖已经讨论过这个问题:在外部位置使用邮件和激活jar的ant邮件任务.基于答案,似乎有两种解决方案.
第一种是手动将这些库依赖项放在ant类路径上.这可以使用-lib命令行参数完成,或者在eclipse中可以使用Window > Preferences > Ant > Runtime > Global Entries,然后添加mail.jar和activation.jar(我很确定这相同的事情-lib,如果我错了,请纠正我).但是这个解决方案对我们的团队来说是不受欢迎的,因为这意味着我们每个人都必须手动执行这些步骤.我正在寻找一种方法来简单地提交我的通知代码,它应该在svn更新后的另一个eclipse安装上工作.
链接文章中的另一个解决方案提到了一种通过从自身调用Ant来以编程方式执行上述操作的方法:
<exec executable="ant">
<arg value="-lib"/>
<arg value="PATH_TO_MY_LIB"/>
<arg value="target"/>
</exec>
Run Code Online (Sandbox Code Playgroud)
这个问题是Ant命令行工具显然只包含在完整安装中,而不是eclipse发行版.因此,如果没有任何想要使用邮件任务的人进行手动操作,就无法使其工作.
有没有什么方法可以自动化这个,而不会给项目设置添加另一个恼人的步骤?我真的不明白为什么这么难实现 - 看起来如果邮件任务没有 …
我有一组构建文件,其中一些调用其他文件 - 首先导入它们.行尾构建可能具有或不具有特定目标(例如"copyother").如果该目标是在行尾构建脚本中定义的,我想从我的主构建文件中调用它.我该怎么做?
部分调用脚本:
<!-- Import project-specific libraries and classpath -->
<property name="build.dir" value="${projectDir}/build"/>
<import file="${build.dir}/build_libs.xml"/>
...
<!-- "copyother" is a foreign target, imported in build_libs.xml per project -->
<target name="pre-package" depends=" clean,
init,
compile-src,
copy-src-resources,
copy-app-resources,
copyother,
compile-tests,
run-junit-tests"/>
Run Code Online (Sandbox Code Playgroud)
我不希望每个项目都定义"copyother"目标.我怎样才能进行有条件的蚂蚁通话?