如何在ANT中检测windows操作系统



我正在使用ant编译Java应用程序。问题是一些开发者在win7上,而另一些则在xp和vista上。编译的一部分是使用WIX构建msi,在win7上这是一个目录,在xp和vista上它在另一个目录中。

蚂蚁任务在Maven中进行控制。我正在寻找一种方法,通过设置wix目录的条件标记来区分ant中的windows操作系统。有什么想法吗?

我知道它将是这样的格式:

<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>

任何帮助都会很棒。

看起来ANT <condition>可以测试名称、家族和;操作系统版本:

  • Ant任务-条件

基于该链接,我们可以查询一些与操作系统相关的属性。一个是通用代码中使用的普通family属性

<!-- CHECK FOR WINDOWS FAMILY OS -->
<condition property="is_windows">
    <os family="windows"/>
</condition>

我的ANT版本没有打印出${os.family}的解析值。


还有:

  • os.name<---这是你需要检查的
  • os.arch
  • os.version

下面是我制作的演示脚本,展示了这些属性的使用:

<?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&Mac。


@KBB提出了一个很好的建议,删除<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实例的事实。一些用户可能会发现这种优化更容易理解;其他人可能出于性能原因想要这样做。

相关内容

  • 没有找到相关文章

最新更新