簡體   English   中英

Groovy:無法解析課程

[英]Groovy : Unable to resolve class

當我通過命令行或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的工作中運行它,但得到了同樣的問題,這使我首先看到它從命令行運行它。

我確實嘗試使用正斜杠和反斜杠,但行為沒有區別。

您在類路徑和包使用中的問題。

讓它工作

1.如果您的類在com.mycompany.build包中聲明,那么groovy / java將在com/mycompany/build relatve to 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

根據文檔 ,在類路徑中,您只能擁有.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,你並不需要指定類路徑。

我認為你只需要將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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM