gpt4 book ai didi

java - Groovyc *.groovy 奇怪的行为

转载 作者:行者123 更新时间:2023-11-30 11:13:54 27 4
gpt4 key购买 nike

我有一些 groovy 文件,我用 groovyc 编译成 java 类文件(因为启动 java 比启动 groovy 只是为了运行一个简短的脚本要快一点。)所有脚本都在默认包中,但是它们共享“.support”包中定义的一些通用功能。

我刚刚修改它并发现了一个非常奇怪的问题——当我使用:

cd /D c:\scripts
groovyc -d c:\destPath *.groovy
cd support
groovyc -d c:\destPath *.groovy

一切正常。

但是当我按照我期望的方式编译时:

groovyc -d c:\destPath c:\scripts\*.groovy

它只会编译其中一个脚本(我相信它是按字母顺序排列的最后一个脚本)。

有人对此行为有解释吗?

最佳答案

这似乎是由于执行 groovyc 可执行文件的包装器批处理脚本造成的。

在 Windows 上,groovyc 命令将启动一个名为 startGroovy.bat 的批处理脚本:

"%DIRNAME%\startGroovy.bat" "%DIRNAME%" org.codehaus.groovy.tools.FileSystemCompiler %*

我不是批处理文件方面的专家,但如果您仔细查看 startGroovy.bat,您可以很容易地注意到 上进行了某种黑客攻击>* 作为参数传递给脚本的通配符(例如 c:\scripts\*.groovy):

rem escape minus (-d), quotes (-q), star (-s).
set _ARGS=%*
if not defined _ARGS goto execute
set _ARGS=%_ARGS:-=-d%
set _ARGS=%_ARGS:"=-q%
rem Windowz will try to match * with files so we escape it here
rem but it is also a meta char for env var string substitution
rem so it can't be first char here, hack just for common cases.
rem If in doubt use a space or bracket before * if using -e.
set _ARGS=%_ARGS: *= -s%
set _ARGS=%_ARGS:)*=)-s%
set _ARGS=%_ARGS:0*=0-s%
set _ARGS=%_ARGS:1*=1-s%
set _ARGS=%_ARGS:2*=2-s%
set _ARGS=%_ARGS:3*=3-s%
set _ARGS=%_ARGS:4*=4-s%
set _ARGS=%_ARGS:5*=5-s%
set _ARGS=%_ARGS:6*=6-s%
set _ARGS=%_ARGS:7*=7-s%
set _ARGS=%_ARGS:8*=8-s%
set _ARGS=%_ARGS:9*=9-s%

如果通过在命令行中执行set DEBUG=on打开回显,然后再次执行groovyc命令,您将获得批处理脚本的输出您可以在其中查看通配符的处理方式。下面是一个示例日志,其中我们有 3 个名为 File1.groovyFile2.groovyFile3.groovy 的文件。

groovyc -d c:\destPath c:\scripts\*.groovy

示例输出:

C:\scripts>set _ARG=C:\scripts\File3.groovy 

C:\scripts>set _ARG=C:\scripts\File3.groovy

C:\scripts>set _ARG=C:\scripts\File3.groovy

C:\scripts>set CMD_LINE_ARGS= C:\scripts\File3.groovy

C:\scripts>set _ARG=

脚本似乎忽略了前两个文件,最终只有最后一个文件被传递给 org.codehaus.groovy.tools.FileSystemCompiler 类(实际的编译器)。当 * 通配符是源文件路径中的第一个字符时,此行为不存在。

关于java - Groovyc *.groovy 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26168696/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com