将 Apache NetBeans 与 Apache Groovy™ 结合使用

作者:  Paul King
PMC 成员

发布日期: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,完成后,您应该会看到类似这样的屏幕

enabling the groovy plugin

接下来,我们将创建一个新项目,选择 File → New Project…​ → Groovy with Gradle

creating a new project

选择 Groovy Application 然后点击 Next

现在,填写项目详细信息

entering project details

我们将创建一个小程序,它使用 Apache Commons Number 库中的一些分数功能。我们将项目命名为 fractions。准备好后点击 Finish

这现在使用 Gradle init 任务创建了一个部分填充的项目。它定义了一些有用的库,为我们设置了 testmain 源集,创建了一个版本目录,并创建了一个 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 语句,然后是一行代码

NetBeans IDE showing simple script

运行脚本显示预期输出 5 / 6。分数库擅长获取精确结果,否则这些结果可能会出现舍入错误。

让我们尝试一些 Groovy 的乐趣。我们将定义一个类别,使分数运算更方便。Groovy 支持多种 元编程 机制,允许您在编译时或运行时向类添加方法。在这种情况下,我们将向 Integer 类添加一个 div 方法,并向 Fraction 类添加一个 plus 方法。这些方法恰好是为 Groovy 的运算符重载而设计的。

use 方法允许我们将此更改应用于选定的代码块。这样,我们不会影响在其他地方使用没有这些更改的 IntegerFraction 类。

NetBeans IDE showing script with category

魔法在于代码片段 println 1 / 3 + 1 / 2。表达式 1 / 3 就像分数的工厂方法。+ 运算符添加分数。

注意
另外,Groovy 的编译器配置和脚本支持意味着,如果需要,我们可以隐藏 FractionCategory 类和 use 调用的定义,只留下包含 println 1 / 3 + 1 / 2 语句的脚本。如果我们正在为数据科学家设置一个用分数编写脚本的环境,这可能是合适的。

但我们还没有完成。IDE 应该让我们调试代码。让我们在 FractionCategory 类的 plus 方法中的语句上设置一个断点,然后用调试运行。

NetBeans IDE showing script debugging

执行已停止。我们可以检查 selfother 变量并添加监视表达式,例如 other.doubleValue()

之前由 Gradle init 调用生成的默认 Groovy 版本是最新的 Groovy 3 版本。但我们可以轻松更改它。让我们切换到 Groovy 5(目前处于 alpha 版本),并查看一个新的 Groovy 5 功能,即 OperatorRename AST 转换。

它为我们之前的类别提供了一种替代方案。简单地说,它在早期解析中更改了运算符重载。您可以在源代码中使用运算符重载,它被重命名为普通方法调用,从而消除了后续元编程的需要。

using Groovy 5

因此,断言语句第 6 行中的 + 被转换为 add 方法调用,而不是 Groovy 通常的 plus 运算符重载方法调用。您可以在 Groovy 5 发行说明中阅读有关此新功能的更多信息。