当前位置: 首页 > 知识库问答 >
问题:

Groovy:无法解析类

张亦
2023-03-14

当我通过命令行或Jenkins运行Groovy脚本时,会出现“无法解析类”错误。

我在C中的同一文件夹中有以下两个groovy文件:\Users\myuser\git\productname\mycompany build\src\main\groovy\com\mycompany\build

富。groovy公司

package com.mycompany.build

class Foo {

  Foo() {
  }

  public void runBar() {
    Bar bar = new Bar();
    bar.name = "my name";
    System.out.println(bar.name);
  }

  static void main(String[] args) {
    Foo foo = new Foo();
    foo.runBar()
  }
}

酒吧groovy公司

package com.mycompany.build

class Bar {
  String name;
}

我经营Foo。groovy使用命令行。

运行Groovy时,我位于以下目录中:

C:\Users\myuser\git\productname\mycompany-build\src\main\groovy\com\mycompany\build

这是我在命令行(cmd)上输入的内容:

C:/java/tools/groovy-2.4.11/bin/groovy -cp C:/Users/myuser/git/myproject/mycompany-build/src/main/groovy/com/mycompany/build Foo.groovy

我得到了以下内容,其中无法找到类“Bar”,但找到了Bar。groovy文件与Foo位于同一目录中。groovy,更不用说我也指定了-cp。

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
C:\Users\myuser\git\myproject\mycompany-build\src\main\groovy\com\mycompany\build\Foo.groovy: 9: unable to resolve class Bar
 @ line 9, column 9.
       Bar bar = new Bar();
           ^

C:\Users\myuser\git\myproject\mycompany-build\src\main\groovy\com\mycompany\build\Foo.groovy: 9: unable to resolve class Bar
 @ line 9, column 15.
       Bar bar = new Bar();
                 ^

2 errors

你能告诉我如何从命令行运行它吗?

一旦我能够运行它,我计划在Jenkins的工作中运行它。我开始尝试在Jenkins作业中运行它,但遇到了同样的问题,这导致我首先考虑在命令行下运行它。

我确实尝试过正斜杠和反斜杠,但在行为上没有区别。

共有3个答案

夏俊杰
2023-03-14

我认为您只需要将类路径参数设置为包含类的目录,即带有productname的目录,而不是myproject

C:/java/tools/groovy-2.4.11/bin/groovy -cp C:\Users\myuser\git\productname\mycompany-build\src\main\groovy\com\mycompany\build Foo.groovy
申高峯
2023-03-14

根据文档,在classpath中,您只能拥有。罐子拉链和。类文件。无法解析类栏,因为它是。java文件,而不是已编译的java类(.class)。

以下对我有用:

C:/java/tools/groovy-2.4.11/bin/groovyc Bar.groovy
C:/java/tools/groovy-2.4.11/bin/groovy Foo.groovy
my name

另请注意,由于Bar.class与Foo.groovy在同一个文件夹中,因此无需指定类路径。

卢晟
2023-03-14

您在类路径和包使用方面的问题。

让它工作

1、如果您的类在包com中声明。我的公司。build然后groovy/java将在com/mycompany/build文件夹中查找它。因此,您需要从类路径中排除包文件夹:

groovy -cp C:\Users\myuser\git\productname\mycompany-build\src\main\groovy Foo.groovy

2、您可以在这两个类中删除包声明。在这种情况下,groovy/java将在类路径中查找没有包文件夹前缀的类:C:\Users\myuser\git\productname\mycompany build\src\main\groovy\com\mycompany\build,您的命令应该可以工作。若您当前的文件夹是带有groovy类的文件夹,那个么该命令可能更简单:

groovy -cp . Foo.groovy

 类似资料:
  • 尝试在我基于Maven的项目的基于Groovy的单元测试中使用groovy.text.XmlTemplateEngine,并将gmaven插件配置如下 我的命令行build mvn clean install无法编译我的简单Groovy单元测试文件,并显示错误消息 [错误]file:/User/.../my-service/src/test/groovy/myapp/MyApplicationes

  • 我使用Spock框架进行测试,直到今天,一切工作都很好;我不知道发生了什么。Intellij说“配置Groovy sdk”,所以我下载了Groovy sdk 2.4.9并对其进行了配置,但在导入行的测试类中: 导入spock.lang.specification intellij说“无法解析符号Spock”。有什么建议吗?

  • 请帮助::我如何处理这些每一个。每一个或为每一个或什么?我有一个.xml我正试图用Groovy脚本解析。下面是.xml: 下面是我的Groovy脚本: 结果如下: 我的问题是:我可以在的代码块中放入什么代码 为了单独打印每个项,如“port”和“protocol”等等,对于.xml块“connector”的每个实例?多谢了。

  • 问题内容: 这是我在JSP文件中的Java代码。我正进入(状态 无法解析Base64Encoder。 为什么会这样呢?我必须添加与相关的内容。任何建议将不胜感激。 问题答案: 看起来您正在使用Web应用程序中包含的jar中不存在的类。您可以尝试以下吗?如有必要,请进行调整,我只是在查看通用文档,然后将其输入- 转到http://commons.apache.org/codec/index.html

  • 问题内容: 因此,我直接从Google的android网站复制了此教程示例内容,却收到一个错误,指出R.id无法解决。 这是我的Java文件 这是我的 问题答案: 您必须导入您的R类 同样,如需求发布一样,您必须为布局使用名称空间。