有没有办法在 Groovy 中的导入周围放置一个 try/catch 块?
Is there a way to place a try/catch block around an import in Groovy?
我目前正在尝试编写一段 Groovy 代码,我想在一台机器上和另一台机器上以不同的方式运行。有些库在另一台机器上不可用,所以我的想法是我会像这样做一个 try/catch 块:
import org.codehaus.groovy.control.MultipleCompilationErrorsException
def importStuff() {
try {import static java.lang.String.format}
} catch (MultipleCompilationErrorsException) {
println("import failed.")
}
importStuff()
但是,这会失败并显示以下内容:4: Unexpected input: 'import' @ line 4, column 10.
在 Python 中,语法如下:
try:
import moduledoesntexist
except:
print("module does not exist.")
如果 运行,将给出输出:
>>> module does not exist.
是否有办法在 Groovy 中重现此类行为?
Is there a way to place a try/catch block around an import in Groovy?
没有
您可以使用名为 Grape 的内置依赖管理系统在 Groovy 脚本中管理您的依赖(因此支持任何导入)。这样您就可以创建一个 Groovy 脚本,运行 无处不在。考虑以下示例:
@Grab('io.ratpack:ratpack-groovy:1.9.0')
@Grab('org.slf4j:slf4j-simple:1.7.30')
import static ratpack.groovy.Groovy.ratpack
ratpack {
handlers {
get {
render 'Hello World from Ratpack with Groovy!!'
}
}
}
这是一个 Groovy 脚本,只需几行代码即可在端口 5050 上启动 Ratpack HTTP 服务器。
$ groovy -version
Groovy Version: 2.5.4 JVM: 1.8.0_292 Vendor: Amazon.com Inc. OS: Linux
$ groovy ratpackscript.groovy
[main] INFO ratpack.server.RatpackServer - Starting server...
[main] INFO ratpack.server.RatpackServer - Building registry...
[main] INFO ratpack.server.RatpackServer - Ratpack started (development) for http://localhost:5050
两个依赖项(ratpack-groovy
和 slf4j-simple
)及其传递依赖项在您第一次 运行 脚本时下载(请记住,下载所有必需的文件可能需要一些时间JAR 文件。)
解决下载依赖问题
有时您可能 运行 在下载依赖项时遇到一些问题,但这主要是因为本地存储库中的文件损坏。 Grape 检查您的本地 ~/.m2/repository
和 ~/.groovy/grapes
文件夹,如果这些目录中的任何一个依赖项被破坏,您将看到一些无法下载的依赖项名称错误。在两个位置删除该依赖项的文件夹可以解决该问题。 (您不必删除具有依赖项名称的文件夹,而是删除该文件夹内具有该依赖项特定版本的文件夹。)
我目前正在尝试编写一段 Groovy 代码,我想在一台机器上和另一台机器上以不同的方式运行。有些库在另一台机器上不可用,所以我的想法是我会像这样做一个 try/catch 块:
import org.codehaus.groovy.control.MultipleCompilationErrorsException
def importStuff() {
try {import static java.lang.String.format}
} catch (MultipleCompilationErrorsException) {
println("import failed.")
}
importStuff()
但是,这会失败并显示以下内容:4: Unexpected input: 'import' @ line 4, column 10.
在 Python 中,语法如下:
try:
import moduledoesntexist
except:
print("module does not exist.")
如果 运行,将给出输出:
>>> module does not exist.
是否有办法在 Groovy 中重现此类行为?
Is there a way to place a try/catch block around an import in Groovy?
没有
您可以使用名为 Grape 的内置依赖管理系统在 Groovy 脚本中管理您的依赖(因此支持任何导入)。这样您就可以创建一个 Groovy 脚本,运行 无处不在。考虑以下示例:
@Grab('io.ratpack:ratpack-groovy:1.9.0')
@Grab('org.slf4j:slf4j-simple:1.7.30')
import static ratpack.groovy.Groovy.ratpack
ratpack {
handlers {
get {
render 'Hello World from Ratpack with Groovy!!'
}
}
}
这是一个 Groovy 脚本,只需几行代码即可在端口 5050 上启动 Ratpack HTTP 服务器。
$ groovy -version
Groovy Version: 2.5.4 JVM: 1.8.0_292 Vendor: Amazon.com Inc. OS: Linux
$ groovy ratpackscript.groovy
[main] INFO ratpack.server.RatpackServer - Starting server...
[main] INFO ratpack.server.RatpackServer - Building registry...
[main] INFO ratpack.server.RatpackServer - Ratpack started (development) for http://localhost:5050
两个依赖项(ratpack-groovy
和 slf4j-simple
)及其传递依赖项在您第一次 运行 脚本时下载(请记住,下载所有必需的文件可能需要一些时间JAR 文件。)
解决下载依赖问题
有时您可能 运行 在下载依赖项时遇到一些问题,但这主要是因为本地存储库中的文件损坏。 Grape 检查您的本地 ~/.m2/repository
和 ~/.groovy/grapes
文件夹,如果这些目录中的任何一个依赖项被破坏,您将看到一些无法下载的依赖项名称错误。在两个位置删除该依赖项的文件夹可以解决该问题。 (您不必删除具有依赖项名称的文件夹,而是删除该文件夹内具有该依赖项特定版本的文件夹。)