我有以下问题:在操作系统是 Linux 和操作系统是 MacOs 的情况下,我必须执行不同的操作。
所以我创建了以下 Ant 脚本目标:
<condition property="unix">
<os family="unix" />
</condition>
<condition property="mac">
<os family="mac" />
</condition>
<target name="initUnixPath" if="unix" depends="clean">
<echo message="initUnixPath: SETTING UNIX PATH" />
<property name="path">/usr/share/XCloud/appl/lib/</property>
</target>
<target name="initMacPath" if="mac" depends="clean">
<echo message="initMacPath: SETTING MAC PATH" />
<property name="path">${basedir}/../../../Mac/CrystalIce/CrystalIce/CrystalIce/Build/Products/Debug/CrystalIce.app/Contents/Resources/java/</property>
</target>
<!-- Copy SharedLib jar files: -->
<!--<copy todir="${basedir}/../../../../../../../../usr/share/XCloud/appl/lib">-->
<!--<copy todir="/usr/share/XCloud/appl/lib">-->
<echo message="${path}" />
<copy todir="${path}">
<fileset dir="${basedir}/../../SharedLib" />
</copy>
..................................................
..................................................
COPY OTHER FILES
当它去执行init目标时,这个目标取决于initUnixPath和initMacPat目标
于是发生了以下事情:
1)如果我在Linux机器上执行它,它首先执行将路径属性设置为正确值的initUnixPath:“/usr/share/XCloud/appl/lib/”,然后执行initMacPath并且什么都不做,因为Linux机器不是 MacOs 机器。所以执行初始化目标并将文件复制到正确的位置:“/usr/share/XCloud/appl/lib/”
2)如果我在 MacOs 机器上执行它,它首先执行initUnixPath(因为 MacOs 是基于 BSD 的系统,所以它是 UNIX 机器)将路径属性设置为错误值“/usr/share/XCloud/appl/lib /"(因为这是Linux系统的路径而不是MacOs的路径),然后执行initMacPath(因为它匹配)并尝试为MacOs系统设置正确的路径(“${basedir}/../../. ./../../../../../usr/share/XCloud/appl/lib") 但它不能这样做,因为该属性只是设置并且不能更改! )
所以我有一个问题,因为在 MacOs 机器上,我将该路径值设置为错误的 Linux 路径(“/usr/share/XCloud/appl/lib/”),而不是正确的 MacOs 路径(“${basedir} /../../../../../../../../usr/share/XCloud/appl/lib")
我发现的唯一解决方案是将 init 目标中依赖项的顺序从:
<target name="init" depends="initUnixPath, initMacPath ">
至:
<target name="init" depends="initMacPath, initUnixPath ">
所以是Mac为MacOs系统设置了正确的路径,然后进入initUnixPath尝试设置Linux路径但是不行(在Mac上运行良好)
如果它是 Linux 系统,请尝试执行initMacPath但 Linux 不是 Mac,因此请退出此目标并执行initUnixPath正确设置 Linux 路径的位置(并且在 Linux 上运行良好)
但这在我看来是一个非常肮脏的解决方案!!!
所以我问我是否可以更准确地检测它是否是 LINUX 系统(而不是通用 UNIX 系统)。我可以做吗?
肿瘤坏死因子
安德烈亚