- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的情况与 outofdate
示例非常相似(请参阅 gengrammer
,http://ant-contrib.sourceforge.net/tasks/tasks/outofdate.html):我有一个包含 *.class< 的文件夹
和 *.seq
文件应在 plantuml
的帮助下转换为 *.pdf
(一个 java
程序)。
这是我当前的任务:
<property name="diagram.path" value="../graphics/plantuml/src"/>
...
<target name="diagram-files" depends="update-classpath">
<outofdate property="manual.outofdate" outputsources="diagram.sources">
<sourcefiles>
<fileset dir="${diagram.path}" includes="*.class"/>
<fileset dir="${diagram.path}" includes="*.seq"/>
</sourcefiles>
<mapper type="glob" dir="${diagram.path}" from="*.class" to="graphics/*.pdf"/>
<mapper type="glob" dir="${diagram.path}" from="*.seq" to="graphics/*.pdf"/>
<sequential>
<shellscript shell="bash">
cd ${diagram.path}
echo ${diagram.sources}
#for diagram in ${diagram.sources}
#do
# java -jar plantuml ... $diagram
#done
</shellscript>
</sequential>
</outofdate>
</target>
我无法让它运行,因为在 ${diagram.sources}
中,所有(反)斜杠都被删除了。所以回应这个变量给了我这样的东西:
C:UsersMYUSERpath-to-folderANDsoONmyfile.class
C:UsersMYUSERpath-to-folderANDsoONmyfile2.class
不知道是我做错了什么还是这是一个功能。任何帮助都会很棒!
顺便说一句。我在 Windows 10 上,但 ant 在 cygwin shell 中运行。我从来没有遇到过这种组合的问题。
最佳答案
不清楚反斜杠是否被 Ant 删除了 outofdate
执行前的任务到达您的 bash 脚本,或者如果反斜杠进入脚本并且您看到了 shell 转义的效果。
如果是后者,那么把${diagram.sources}
包裹起来或许就能解决问题在引号中,以便 shell 将其解释为字符串文字而不进行转义。例如:
<project>
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="/Users/naurc001/ant-contrib-0.6-bin/lib/ant-contrib-0.6.jar"/>
</classpath>
</taskdef>
<property name="diagram.path" value="../graphics/plantuml/src"/>
<property name="diagram.sources.property" value="C:\private\tmp\anttest\graphics\plantuml\src\myfile.class C:\private\tmp\anttest\graphics\plantuml\src\myfile2.class" />
<target name="diagram-files">
<outofdate property="manual.outofdate" outputsources="diagram.sources">
<sourcefiles>
<fileset dir="${diagram.path}" includes="*.class"/>
<fileset dir="${diagram.path}" includes="*.seq"/>
</sourcefiles>
<mapper type="glob" dir="${diagram.path}" from="*.class" to="graphics/*.pdf"/>
<mapper type="glob" dir="${diagram.path}" from="*.seq" to="graphics/*.pdf"/>
<sequential>
<shellscript shell="bash">
echo Unquoted: ${diagram.sources.property}
echo Quoted: '${diagram.sources.property}'
for diagram in $(echo '${diagram.sources.property}')
do
# I don't have plantuml, so just stubbing it to print the command.
echo java -jar plantuml ... $diagram
done
</shellscript>
</sequential>
</outofdate>
</target>
</project>
> ant diagram-files
Buildfile: /private/tmp/anttest/proj/build.xml
diagram-files:
[shellscript] Unquoted:
C:privatetmpanttestgraphicsplantumlsrcmyfile.class
C:privatetmpanttestgraphicsplantumlsrcmyfile2.class
[shellscript] Quoted:
C:\private\tmp\anttest\graphics\plantuml\src\myfile.class
C:\private\tmp\anttest\graphics\plantuml\src\myfile2.class
[shellscript] java -jar plantuml ...
/private/tmp/anttest/graphics/plantuml/src/myfile.class
[shellscript] java -jar plantuml ...
/private/tmp/anttest/graphics/plantuml/src/myfile2.class
BUILD SUCCESSFUL
Total time: 0 seconds
我无法访问 Windows 机器以在该平台上进行直接测试,因此我通过对 diagram.sources.property
进行硬编码来模拟该问题。在路径中使用 Windows 风格的反斜杠。 <shellscript>
回显相同的属性两次:一次不带单引号,一次带单引号。对于未引用的形式,由于 shell 转义,输出看起来像您所描述的那样。引用后,我们得到了预期的结果。
但是,如果我们刚刚通过 '{diagram.sources.property}'
到其他命令,如 jar ...
,那么我们就会产生意想不到的副作用。 Bash 会将整个列表作为单个参数传递。为了解决这个问题,我们可以将整个内容包装在 $(echo ...)
中。将其转回多个参数。测试输出证明我们调用了 jar
对每个文件执行一次命令。
根据您需要运行的工具,有时需要将 Windows 风格的反斜杠路径分隔符转换为 Unix 风格的正斜杠。如果出现这种需要,那么我建议使用 cygpath
bash 脚本中用于将反斜杠转换为斜杠的实用程序。特别是 -u
和 -w
选项在这里很有帮助。
The -u and -w options indicate whether you want a conversion to UNIX (POSIX) format (-u) or to Windows format (-w). Use the -d to get DOS-style (8.3) file and path names. The -m option will output Windows-style format but with forward slashes instead of backslashes. This option is especially useful in shell scripts, which use backslashes as an escape character.
您提到您正在使用 Cygwin,但也许您也有队友在 Mac 或纯 Linux 上运行,您需要与他们互操作。如果是这样,那么您可以保护对 cygpath
的调用。在检查 uname -a
的值中.在 Cygwin shell 中,uname -a
的输出将包含某种形式的“Cygwin”。
关于 bash 转义的其他引用资料:
关于java - ant-contrib:过时的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45239440/
这个问题可能不是很清楚,所以让我用一个例子来说明我的意思。说我要复制几个文件夹: ... 但是我需要从如下所示的文本文件中加载它们,而不是在脚本中对这些文件夹
ant 和 ant clean all 的区别? 请任何人都可以清楚地说明何时使用 Ant 和 Ant 清洁所有。 C:> Ant c:> Ant 清理所有 最佳答案 “ant”运行项目的默认目标。
我想转换如下: 到: aoeu 的值可以包含任意数量的逗号分隔元素。 我可以使用 groovy Ant 任务,但不能使用 ant-contrib 中的任何
我看到了 this相关问题,但我的情况不同,所以再次询问。基本上,我必须按特定顺序运行 12 个 ant 文件。对于每个 ant 文件,我选择不同的目标,例如“创建”或“构建并部署全部”。如何创建一个
我可以编写一个在从另一个 ant 任务执行时获取参数的 ant 任务吗? 我通常试图实现的目标是重用现有任务不同的参数。 我不知道的是: ant中有这样的子任务吗? 它可以带参数吗? 如何以及在何处指
给定一个 ant 文件集,我需要对其执行一些类似 sed 的操作,将其压缩为多行字符串(每个文件有效一行),并将结果输出到文本文件。 我在寻找什么 Ant 任务? 最佳答案 Ant script ta
我有一个包含 jars 等绝对路径的属性文件。当使用这些属性时,它们以构建文件中指定的 basedir 为前缀。 我如何获得绝对路径? build.properties: mylib=/lib/myl
我有一个任务: someString someOtherString 如何连接 s
我遇到的情况涉及运行带有可选参数的 ant 构建,这些参数总是被指定但并不总是被定义,就像这样 ant -DBUILD_ENVIRONMENT=test -Dusername_ext= -Dconf.
我正在寻找一种在 Ant 文件中包含 .jar 的方法,以便我可以立即使用它并在我的目标中调用它的方法。 就我而言,它是 ant-contrib-1.0b3.jar . 最佳答案 最好的方法是将 An
我在 ant 方面比较新,在学校我有一个作业来做一个构建文件。我的问题之一是将其名称(或路径)作为 ant 参数的文件复制到“/foldercopy”。我需要做类似的事情: Ant cpfile文件.
亲爱的,我目前在检索foreach循环中设置的属性的值时遇到一些问题。也许你们中的一个可以帮助我... 目的是检查自从生成相应的jar之后,是否已修改文件夹的一个文件。这样,我知道是否必须再次生成ja
我想创建一个宏: 然后使用它: 但是,我想为隐式元素指定一个默认值......类似于: 所以我可以这样使用它:
我想将 ANT、JavaSDK 和 FlexSDK 包含到我的项目目录中。我需要我公司的人能够从源代码编译。 我有一个以以下内容开头的 build.bat 文件: ant blah/blah/blah
我想对目录中的每个文件使用 ant 脚本集只读 但 exec 不允许 filelist: The typ
如果我以 root 身份运行任务,有没有办法检测它是否以 root 身份运行并以不同的用户身份运行某些任务。 我有一些任务需要以 root 身份运行,但其他任务只需要以当前用户身份运行。 最佳答案 如
是否可以通过ant任务使用JUnit 4.6的新MaxCore运行程序? 最佳答案 从4.6开始,不幸的是没有。您需要创建自己的自定义Ant任务才能利用MaxCore功能。 关于ant - Ant J
我有一个关于 Ant 及其对环境变量的处理的问题。 为了说明我有一个小样本。 给定 Ant 构建文件 test.xml:
该文件如下所示: a1,b1 a2,b2 ... 我知道值“a2”。 如何将值“b2”转换为属性值。 我知道如何通过以下方式选择包含“a2”的行: 但是不知道如何将属性值设置为“b2”。 我
Ant 属性可以通过属性文件设置,从属性文件解析其他属性吗? 例如,我可以这样做: 和 prop2 变成“in_test_xml1”。那挺好的。 但在这种情况下,当使用输入属性文件时: prop1
我是一名优秀的程序员,十分优秀!