gpt4 book ai didi

java - 我可以使用 Ant 检测我是否在 Linux 系统(而不是通用 Unix 系统)上吗?

转载 作者:行者123 更新时间:2023-11-30 04:11:29 27 4
gpt4 key购买 nike

我有以下问题:在操作系统是 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目标时,该目标依赖于initUnixPathinitMacPat目标

因此发生了以下事情:

1) 如果我在 Linux 计算机上执行它,它首先执行将 path 属性设置为正确值的 initUnixPath:“/usr/share/XCloud/appl/lib/”,然后执行 initMacPath 并且不执行任何操作,因为 Linux 计算机不是 MacOs 计算机。因此,执行 init 目标并将文件复制到正确的位置:“/usr/share/XCloud/appl/lib/”

2)如果我在MacOs机器上执行它,它首先执行设置路径initUnixPath(因为MacOs是基于BSD的系统,所以它是UNIX机器) > 属性修改为WRONG值“/usr/share/XCloud/appl/lib/”(因为这是Linux系统的路径,而不是MacO的路径),然后执行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 系统)。我能做到吗?

Tnx

安德里亚

最佳答案

我总是将安装的二进制文件符号链接(symbolic link)到 /usr/local/bin 。这样我就不用担心是否安装在/Applications了或/opt/usr/share等。如果您在该位置没有看到可执行文件(通过 <available/> 任务),则使构建失败并提供有关执行操作的说明。

<property name="bin.link.dir"  value="/usr/local/bin"/>
<available file="${bin.link.dir}/xcloud" <!-- Or whatever the app -->
property="xcloud.app.available"/> <!-- Or whatever the app -->
<fail>
Could not find required app...
download it from yadda, yadda, yadda...
Install it by blah, blah, blah...
Then create a symbolic link to ${link.dir}...
<condition>
<not>
<isset property="xcloud.app.available"/>
</not>
</condition>
</fail>

您还可以使用uname如果是Unix类型系统则命令查看是否是Linux:

<!-- outputs "Darwin" on Mac and "Linux" on Linux -->
<exec executable="uname"
os="unix"
outputproperty="os.type"/>

<condition property="linux.os">
<equals arg1="${os.type}" arg2="Linux"/>
</condition>

关于java - 我可以使用 Ant 检测我是否在 Linux 系统(而不是通用 Unix 系统)上吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19500112/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com