我有一个ant目标,它将文件从一个位置复制到另一个位置,假设它在build.xml
中定义为:
${project}/some-component-ABC/lib/whatever.jar
但是在文件系统中,实际路径是
${project}/some-component-abc/lib/whatever.jar
在some-component-abc中没有大写的ABC…
此路径在Windows(7)中可以解析,但在Linux中不能解析?
为什么?
我会弄清楚怎么处理它,只是想了解一下为什么功能不同。
根据以下文章:https://ubuntuforums.org/showthread.php?t=1227827Linux是用区分大小写的C语言编写的。
Ant并没有对路径做任何花哨的操作——它只是向下委托给底层文件系统。Windows的文件系统不区分大小写,而我能想到的任何linux文件系统都是。因此,在windows中,some-component-abc
和some-component-ABC
是同一个目录,而在linux中它们不是。
正如其他人所提到的,在大多数情况下,Ant只是为所有内容存储字符串,并且在实际执行文件系统操作时依赖于操作系统的文件系统,因此在Linux和Windows中运行脚本时,您将遇到这样的差异。
但是,Ant确实有操作类路径字符串的任务,这些任务可用于在使用文件之前训练对文件的引用。下面是一个例子:
~/test $ ls -1
build.xml
FILE
build . xml:
<project>
<pathconvert property="file">
<fileset dir="${basedir}" includes="file" casesensitive="false" />
</pathconvert>
<echo message="${file}" />
</project>
输出:[echo] /home/me/test/FILE
另一种方法(将返回相对于文件集的dir
属性的类似路径的字符串):
<project>
<fileset dir="${basedir}" includes="file" casesensitive="false" id="filepath" />
<property name="file" refid="filepath" />
<echo message="${file}" />
</project>
输出: [echo] FILE