Groovy:无法解析课程

时间:2017-07-13 06:27:35

标签: jenkins groovy

当我通过命令行或Jenkins运行我的Groovy脚本时,我得到一个"无法解析类"错误。

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

中的同一文件夹中有以下2个groovy文件

Foo.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()
  }
}

Bar.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 个答案:

答案 0 :(得分:3)

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

让它发挥作用

1。如果您的类在包com.mycompany.build中声明,那么groovy / java将在文件夹com/mycompany/build中查找它与classpath相关联。所以你需要从类路径中排除package-folders:

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

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

groovy -cp . Foo.groovy

答案 1 :(得分:1)

根据docs,在类路径中,您只能拥有 .jar .zip .class 文件。无法解析类 Bar ,因为它是 .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 位于同一文件夹中,因此您无需指定类路径。

答案 2 :(得分:0)

我认为你只需要将classpath参数设置为包含类的目录,即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