将 Apache NetBeans 与 Apache Groovy™ 结合使用
发布日期:2025-02-25 晚上 10:15
让我们尝试将最新的 Apache NetBeans 与 Apache Groovy 结合使用。
Apache NetBeans 项目最近宣布发布 Apache NetBeans 25。让我们与 Apache Groovy 一起体验一下。
我们假设您已按照 NetBeans 下载页面下载了它。如果您以前没有将 NetBeans 与 Groovy 结合使用,您可能需要启用 Groovy 插件。选择 Tools → Plugins → Installed
,勾选 Groovy
并点击 Activate
,完成后,您应该会看到类似这样的屏幕
接下来,我们将创建一个新项目,选择 File → New Project… → Groovy with Gradle
。
选择 Groovy Application
然后点击 Next
。
现在,填写项目详细信息
我们将创建一个小程序,它使用 Apache Commons Number 库中的一些分数功能。我们将项目命名为 fractions。准备好后点击 Finish
。
这现在使用 Gradle init
任务创建了一个部分填充的项目。它定义了一些有用的库,为我们设置了 test
和 main
源集,创建了一个版本目录,并创建了一个 app
子项目。它设置了一些不错的依赖项,例如 Spock 测试框架,但我们不会在本文中使用它。
因此,对于我们的小程序,我们将把依赖项精简到我们需要的那些。versions toml 文件变为
[versions]
groovy = "3.0.22"
commons-numbers-fraction = "1.2"
[libraries]
groovy = { module = "org.codehaus.groovy:groovy", version.ref = "groovy" }
numbers-fraction = { module = "org.apache.commons:commons-numbers-fraction", version.ref = "commons-numbers-fraction" }
我们还将 Gradle 构建文件稍微精简为这样
plugins {
id 'groovy'
id 'application'
}
repositories {
mavenCentral()
}
dependencies {
implementation libs.groovy
implementation libs.numbers.fraction
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
application {
mainClass = 'App'
}
我们现在可以创建我们的脚本了。它只有一个 import 语句,然后是一行代码
运行脚本显示预期输出 5 / 6
。分数库擅长获取精确结果,否则这些结果可能会出现舍入错误。
让我们尝试一些 Groovy 的乐趣。我们将定义一个类别,使分数运算更方便。Groovy 支持多种 元编程 机制,允许您在编译时或运行时向类添加方法。在这种情况下,我们将向 Integer
类添加一个 div
方法,并向 Fraction
类添加一个 plus
方法。这些方法恰好是为 Groovy 的运算符重载而设计的。
use
方法允许我们将此更改应用于选定的代码块。这样,我们不会影响在其他地方使用没有这些更改的 Integer
和 Fraction
类。
魔法在于代码片段 println 1 / 3 + 1 / 2
。表达式 1 / 3
就像分数的工厂方法。+
运算符添加分数。
注意
|
另外,Groovy 的编译器配置和脚本支持意味着,如果需要,我们可以隐藏 FractionCategory 类和 use 调用的定义,只留下包含 println 1 / 3 + 1 / 2 语句的脚本。如果我们正在为数据科学家设置一个用分数编写脚本的环境,这可能是合适的。 |
但我们还没有完成。IDE 应该让我们调试代码。让我们在 FractionCategory
类的 plus
方法中的语句上设置一个断点,然后用调试运行。
执行已停止。我们可以检查 self
和 other
变量并添加监视表达式,例如 other.doubleValue()
。
之前由 Gradle init 调用生成的默认 Groovy 版本是最新的 Groovy 3 版本。但我们可以轻松更改它。让我们切换到 Groovy 5(目前处于 alpha 版本),并查看一个新的 Groovy 5 功能,即 OperatorRename
AST 转换。
它为我们之前的类别提供了一种替代方案。简单地说,它在早期解析中更改了运算符重载。您可以在源代码中使用运算符重载,它被重命名为普通方法调用,从而消除了后续元编程的需要。
因此,断言语句第 6 行中的 +
被转换为 add
方法调用,而不是 Groovy 通常的 plus
运算符重载方法调用。您可以在 Groovy 5 发行说明中阅读有关此新功能的更多信息。