如果有人在Windows(NTFS)上运行Ant符号链接任务会发生什么?

4

我编写ant构建脚本。我需要创建符号链接,我找到了symlink任务。根据手册,它只在Unix系统上工作。如果有人在Windows平台上运行我的构建脚本会发生什么?构建失败吗?还是这个任务将在Windows平台上被忽略?或者在NTFS驱动器的情况下,它甚至可以工作吗?

2个回答

3
我是Win7用户,并尝试了此方法。由于我已经安装了Mingw,因此它使用了ln。Ln似乎只是复制了所有内容。由于普通的Windows安装没有ln,所以在那里失败了。
以下是没有ln的情况:
C:\Users\Janus\Desktop>.\apache-ant-1.8.2\bin\ant
Unable to locate tools.jar. Expected to find it in C:\Program Files\Java\jre6\lib\tools.jar
Buildfile: C:\Users\Janus\Desktop\build.xml

dist:

BUILD FAILED
C:\Users\Janus\Desktop\build.xml:3: Could not launch ln: java.io.IOException: Cannot run program "ln": CreateProcess error=2, The system can
not find the file specified

Total time: 1 second

C:\Users\Janus\Desktop>

Build.xml:

<project name="MyProject" default="dist" basedir=".">
<target name="dist">
<symlink link="lol" resource="d3dwindower" />
</target>
</project>

嗯,你确定它不会在找不到ln的情况下尝试使用mklink吗?它会失败还是默默忽略?你能否删除/重命名你的ln并进行检查? - Dmytro Zavalkin
谢谢。你能解释一下 tools.jar 部分吗?如果存在 tools.jar,会发生什么情况,它会使用一些 Java 代码来模拟 ln 吗? - Dmytro Zavalkin
1
Ant文档中的引用:当您需要JDK功能(例如javac任务或rmic任务)时,必须添加tools.jar。如果设置了JAVA_HOME环境变量,则Ant附带的脚本将自动添加所需的JDK类。即我使用JRE类路径运行Ant。在这种情况下,这并不重要,因为我没有编译任何内容。关于符号链接也没有任何区别。 - Janus Troelsen

1
我创建了一个条件属性,用于识别我是否正在运行Unix系统:

<condition property="isUnix">
  <os family="unix"/>
</condition>

然后在我的目标对象上使用一个'if'属性,这样它只会在Unix上执行:

<target name="makeSymLinkToJar" depends="jar" if="isUnix">
    <symlink link="${distlink.jar}" resource="${dist.jar}"/>
</target>

抱歉,问题是关于在Win平台上运行符号链接任务会发生什么,而不是如何限制任务只在Unix平台上运行。 - Dmytro Zavalkin
我得到了这个警告:makeSymLinkToJar: [symlink] cygwin警告: [symlink] 发现MS-DOS风格的路径:C:\dev\mdr-svn\dist/mdr.jar [symlink] 首选的POSIX等效路径是:/cygdrive/c/dev/mdr-svn/dist/mdr.jar [symlink] CYGWIN环境变量选项“nodosfilewarning”关闭此警告。 [symlink] 有关POSIX路径的更多详细信息,请参阅用户指南: [symlink] http://cygwin.com/cygwin-ug-net/using.html#using-pathnames它创建了一个看起来像损坏的jar文件但可能是一个错误的符号链接的1k文件。不确定没有cygwin会发生什么。 - PeterVermont

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接