- 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/
我是非洲的一名学生,在我们的土地上,确实存在缓慢且昂贵的互联网连接,这就是为什么每当我们听到安装软件的“在线存储库”方法这个词时都会害怕得发抖。该死的,这通常意味着你必须去别处看看。 问题。(如果没有
我正在使用 OpenCV 1 进行一些图像处理,并且对 cvSetErrMode 函数(它是 CxCore 的一部分)感到困惑。 OpenCV 具有三种错误模式。 叶:调用错误处理程序后程序终止。 父
安装新版 IDEA.14 后,(maven)项目的部署显着增加(从 15 秒增加到 47 秒)。 最佳答案 原因: IDEA 使用 捆绑 Maven的版本 解决方案:设置 (ctrl+alt+S) -
在 .NET 中,您可以将某些方法标记为过时,以便开发人员在尝试使用已弃用的方法时收到警报。 Private Sub FormerMethod() 问题是您只能在您控制的类中执行此操作。当您希望开发
一段时间以来,我一直在尝试自己解决这个问题,但一直没有成功。当我大约有 10% 的时间重新部署我的 Rails 应用程序时,就会发生这种情况。其他 90% 的时间部署顺利进行。 我试了又试,还是没成功
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在学习 HTTP/2 协议(protocol)。它是一个带有小消息帧的二进制协议(protocol)。它允许在单个 TCP 连接上进行流复用。从概念上讲,它似乎与 WebSockets 非常相似。
在 Matlabs 的最新版本中,specgram 函数被 spectrogram 取代,文档说明: Note. To obtain the same results for the removed
我们试图在构建时标记外部类型(如 ConfigurationManager)的使用。 自定义代码分析字典可以提供帮助 [1],但仅限于项目中包含源代码的情况。同样,Obsolete 属性适用于项目中包
我将 Anaconda 与 Python 3 结合使用,并尝试安装 cc 包,这是 uber h3 包的要求。 尝试通过以下方式在 anaconda 命令行中安装时: pip install cc 我
我在 Razor 中创建了一个专门用于显示货币的显示模板,现在我想在我的代码中删除它并替换为接受字符串格式(我可以将其设置为“C”)的标准文本显示模板。 然而,出现了很多次,所以我想使用类似 [Obs
我希望我的网站具有如下所示的 URL: example.com/2010/02/my-first-post 我有我的 Post带 slug 的模型字段('我的第一篇文章')和 published_on
4.7 并喜欢在 qgraphicsview 上叠加两个图像。顶部的图像应是半透明的,以便能够透过它看到。最初,两个图像都是完全不透明的。我期望存在一些为每个像素设置全局 alpha 值的函数,但似乎
总结: 我在我的 Swift 代码中犯了一个错误,我已经修复了它。然后我问自己为什么会这样,我该如何避免。我尝试了一些方法,但没有任何帮助。 我把错误和我的想法放在下面。我希望你能教我避免这种错误的正
我正在尝试重命名在 SVN 中跟踪的 Java 包。这一切似乎都有效。它将代码移动到新包等。然而,噩梦就在那时开始,乐趣就开始了,这取决于你的观点。摆脱旧包很难。 我陷入了“过时”或“不存在”消息的循
我们使用 NLog 或 Serilog 进行日志记录。我们正忙于将系统从 ASP.NET 移植到 ASP.NET Core,这 has logging built in . 理想情况下,我们希望放弃
ETag header 的定义 ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag ): The ETag HTTP re
我是一名优秀的程序员,十分优秀!