我正在使用ant来编译Java应用程序。问题是一些开发者在win 7上,其他人在xp和vista上。编译的一部分是使用WIX构建一个msi,在win7上这是一个目录,在xp和vista上是另一个目录。
蚂蚁任务在Maven中控制。我正在通过一种方式告诉蚂蚁中的windows os与用于设置wix目录的条件标记之间的区别。有什么想法吗?
我知道它将采用以下格式:
<if>
<condition property="isWin7">
Check for windows 7
</condition>
<then>
set wix path to win 7 installation
</then>
<else>
set to vista/xp wix installation
</else>
</if>
任何帮助都会很棒。
答案 0 :(得分:13)
看起来ANT <condition>
可以测试姓名,家庭&amp;操作系统版本:
基于该链接,我们可以查询与OS相关的一些属性。一个是公共代码中使用的普通family
属性:
<!-- CHECK FOR WINDOWS FAMILY OS -->
<condition property="is_windows">
<os family="windows"/>
</condition>
我的ANT版本不打印${os.family}
的已解析值。
还有:
这是我用来展示这些属性使用的演示脚本:
<?xml version="1.0" encoding="UTF-8"?>
<project name="Test" default="build" >
<!-- CHECK FOR WINDOWS FAMILY OS -->
<condition property="is_windows">
<os family="windows"/>
</condition>
<condition property="is_windows_7">
<os name="Windows 7"/>
</condition>
<!-- DISPLAYS WINDOWS OS -->
<target name="display_windows" if="is_windows" >
<echo message="OS Family is: Windows" />
</target>
<target name="build" >
<antcall target="display_windows" />
<echo message="OS Name is: ${os.name}" />
<echo message="OS Architecture is: ${os.arch}" />
<echo message="OS Version is: ${os.version}" />
</target>
</project>
自回答这个问题以来,上面的代码已经提升到我们的生产构建系统,它提供跨Windows和Windows的共享功能。 Mac中。
@thekbb提出了删除<antcall target="display_windows" />
的好建议,并根据以下代码更新目标定义以依赖display_windows
:
<target name="build" depends="display_windows">
<echo message="OS Name is: ${os.name}" />
<echo message="OS Architecture is: ${os.arch}" />
<echo message="OS Version is: ${os.version}" />
</target>
这基于antcall
在新JVM中启动ant的新实例这一事实。有些用户可能会发现这种优化更容易理解;其他人可能出于性能原因想这样做。