- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些 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.groovy
、File2.groovy
和 File3.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/
我正在编译一个项目,该项目在 Eclipse 中运行良好,并使用 ant 构建良好,但在 IntelliJ IDEA 中给出: 内部 groovyc 错误:代码 1 我该如何解决这个问题?其他错误消息
我正在尝试使用 Groovy,特别是从 Java 应用程序中编译和运行 Groovy 类。 当然,Groovy 可能存在编译问题,并且我看到有关报告编译问题的不同行为 - 在命令行上运行 groovy
我有一些 groovy 文件,我用 groovyc 编译成 java 类文件(因为启动 java 比启动 groovy 只是为了运行一个简短的脚本要快一点。)所有脚本都在默认包中,但是它们共享“.su
在 maven 或 gradle 中设置一个混合的 java7/groovy2 项目时,是否有任何理由先用 javac 然后用 groovyc 编译,而不是让 groovyc 处理所有的事情? 我开始
当我在没有 fork 选项的情况下运行 groovyc 时,它工作得很好。但使用 fork="true"时会失败并显示错误消息: Error: Could not find or load main
嗨,我有一组 java 类,当我使用 javac 命令编译它们时,它们工作得非常好: javac -g -nowarn -classpath /usr/class/cs143/cool/lib:.:/
我正在尝试编译一个项目,其中有一些用 groovy 编写的测试。该项目具有适用于 Java 12 的 --enable-preview。 我正在使用 gmavenplus-plugin 来做到这一点:
我是 Spock 的新手,尝试编写一个简单的 Spock 但失败了: Error:Groovyc: Could not instantiate global transform class org.s
我在 Intellij Idea 中有一个 gradle 项目,其中包含两个模块: foo-core |--src | |--main | | |--java
我在 Ubuntu 18.04 下安装了 Netbeans 11.3,并在下面创建了一个新的 Groovy 项目。 从主菜单中选择"file">“新建项目”(Ctrl-Shift-N;在 Mac 上为
我有 Java 经验,但对 Groovy 还很陌生。另外,我习惯在 Eclipse 中完成 Java 工作,但有人要求我切换到 IntelliJ,所以我就这么做了。我继承的项目是从 GitHub 存储
我正在尝试在所有 Java、Groovy 和 Kotlin 之间进行联合/混合编译。我目前正在研究一个理论,即如果可以让 groovyc 只在第一阶段发出 stub 文件,那应该是可能的。 可以吗?否
我正在使用 IntelliJ 11.1.3、IvyIDEA Plugin for IntelliJ、Spock 0.5(这取决于 Groovy 1.8.4 ) 和 Groovy 1.5.6。 我有一个
我是一名优秀的程序员,十分优秀!