修改 GroovyDSL 类路径以包含第 3 方库

Modify GroovyDSL classpath to include 3rd party libraries

我正在尝试创建一个引用一些外部库的 GroovyDSL 脚本。这是我的脚本:

import com.github.javaparser.ast.Node
import org.reflections.Reflections

def ctx = context(
        ctype: 'groovy.util.ObjectGraphBuilder',
        paths: ['com/example/scripts/.*'],
        filetypes: ["groovy"]
)

Map<String, Class> candidateClasses = new Reflections(Node.packageName).getSubTypesOf(Node)
        .collectEntries { Class type -> [(type.simpleName.uncapitalize()): type] }

contributor(ctx) {
    candidateClasses.each { String methodName, Class type ->
        method name: methodName, params: [props: "java.util.Map", closure: "groovy.lang.Closure"], type: type.name
    }
}

尝试在 Intellij 中启用它,我得到:

startup failed: transformDslSyntaxgdsl: 1: unable to resolve class com.github.javaparser.ast.Node

@ line 1, column 1.

import com.github.javaparser.ast.Node

现在,我在 pom.xml 中声明了正确的外部依赖项,依赖于它们的其余代码工作正常。我还将脚本放在源文件夹中(此处建议的其他一些答案可能相关)。

我看过一些 GDSL 参考 Intellij 类型的示例,例如 PsiClass,这告诉我 GDSL 文件的类路径似乎与项目类路径不同。有什么方法可以确保项目依赖项附加到该类路径?

我也试过使用 @Grape 只得到 。添加 Apache Ivy 作为依赖项没有帮助,因为项目依赖项似乎不会影响 GDSL 类路径。

深入挖掘后,我发现修改 IDE 的类路径本身非常容易。

您需要做的就是将依赖项放入 Intellij 安装目录的 lib 子文件夹中,并引用 classpath.txt.

中的 jar

最初,我添加了我的 GDSL 直接依赖的 jar,但后来我意识到我可以简单地将对 Apache Ivy 的依赖添加到 classpath.txt@Grab 注释将开始工作。