JavaAnt和文件。isDirectory()
我通过ant
运行了一个测试,其中包括一个组件,该组件使用以下方法检查以确保作为参数提供的路径是目录:
File dir = new File(path);
if (!dir.isDirectory()) {
System.err.println("Invalid directory "+path+".");
通过ant任务运行时:
<java
classname="foo.bar"
classpath="${classpath}"
>
<arg value="-d ${testDir}"/>
当testDir
是一个包含相对路径的位置属性时,组件会出现“Invalid directory”消息,该消息反映了绝对(但正确)路径
当使用java -cp[yada] foo.bar -d /the/exact/same/absolute/path
直接从同一位置运行sans-ant时,不存在这样的问题
我对ant很陌生,我想这里有some permission I have to grant
请注意:
${testDir}
是一个子目录,也就是说,它不会从项目树中引出李>${testDir}
的绝对路径和其中的所有组件都是世界可读的李>
# 1 楼答案
如果
testDir
是一个相对路径,则将使用系统属性用户来解析它。默认情况下为dir。快速解决方案是在父目录中运行ant
当java任务运行时,还可以添加
dir
来指定当前目录如果收到以下消息,则需要属性
fork="true"
:# 2 楼答案
我注意到一些有趣的东西,更仔细地观察输出。项目目录是
/home/devel/project/
(但请注意/home/devel
不是一个正常的主目录;devel
只是一个组,该目录是世界范围内可读的,也可由执行用户写入)。${testDir}
也是一条相对路径,test/serverconf
,然后ant将其正确解析为`/home/devel/project/test/serverconf但我注意到组件的错误:
那里有两个空格,而错误消息本身只产生一个。如果我试图运行应用程序
java foo.bar.Server -d " /home/devel/project/test/serverconf"
,当然会出现同样的错误。在本例中,它不是寻找一个绝对路径,而是寻找一个以空格字符开头的相对路径(如果我在错误消息中的坏参数上使用引号,这一点就很清楚了)然而,这是一个蚁虫,因为它explicitly contradicts the documentation,在“示例”下明确指出:
在
build.xml
中,-d ${testDir}
中只有一个空格。我尝试了-d${testdir}
,因为命令行解析器(org.apache.commons.cli)会接受这两种方式。它会窒息的是-d " /whatever/path"
所以ant解析
${testDir}
,然后在"-d"
和" /home/devel/project..."
中传递两个参数。如果这只是ant如何替换变量的一个微妙之处,我会说“类似于bug”,但由于存在一个潜在的警告,它为记录的示例提供了一个例外,这只是一个问题但是使用文本路径而不是变量:
导致了同样的问题:
再说一次,当
java foo.bar.Server
从与ant target
相同的目录运行时,相对路径在这里可以正常工作。但是如果使用-d " test/serverconf"
就不会,因为应该允许用户以这种方式使用引号并包含空格所以文档中关于
arg value
的陈述是错误的Ant是而不是将其作为“包含空格的单个命令行参数”传递的。它将其作为两个参数传递,并将空格包含在第二个参数中想想看