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

标签 windows ant operating-system

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

ant 任务在 Maven 中进行控制。我正在寻找一种方法来区分 ant 中的 Windows 操作系统与条件标记以设置 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>

任何帮助都会很棒。

最佳答案

它看起来像 ANT <condition>可以测试操作系统的名称、系列和版本:

基于该链接,我们可以查询一些与操作系统相关的属性。一个是正​​常的 family公共(public)代码中使用的属性:

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

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


还有:

  • os.name <--- 这是你需要检查的
  • 操作系统架构
  • 操作系统版本

这是我为展示这些属性的使用而制作的演示脚本:

<?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 之间提供共享功能。


@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 实例。有些用户可能会发现这种优化更容易理解;出于性能原因,其他人可能希望这样做。

关于windows - 如何在 ANT 中检测 windows 操作系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9566347/

相关文章:

我可以在编写操作系统时只包含 C 库吗(因为它们是用 C 制作的)

php - 如何使用 PHP 记录到 Windows 事件日志?

windows - 无法在 Windows 10 上提取 bash (Ubuntu)

java - ant 如果目标失败

apache - 针对特定浏览器/操作系统组合的 .htaccess 重写

operating-system - 何时使用 MCS 锁

python - `ip = ipaddress.ip_address(args.ip)` 的 TCP 端口测试不准确

windows - 如何在 Windows 中直接分配显卡内存?

java - Ant:指定外部依赖项时出现 ClassNotFoundException

java - DH key 大小必须是 64 的倍数,并且只能在 512 到 2048(含)之间