2017-07-13 91 views
1

當我通過命令行或Jenkins運行我的Groovy腳本時,出現「無法解析類」錯誤。Groovy:無法解決類

我有相同的文件夾中使用C以下2個常規文件:\ Users \用戶爲myuser \ git的\產品名稱\ myCompany中建造的\ src \主\常規\ COM \ myCompany中\建立

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的工作中運行這個工具,但是得到了同樣的問題,這導致我首先考慮從命令行運行它。

我的確嘗試過用正斜槓和反斜槓,但沒有任何行爲差異。

回答

1

您的問題。

得到它的工作

1.如果你的類在包com.mycompany.build然後常規/ java會尋找它在文件夾com/mycompany/build relatve到類路徑聲明。所以你需要從你的classpath排除包文件夾:

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 
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 
0

按照docs,在classpath中只能有的.jar.ZIP。類文件。類酒吧不能resolced,因爲它是一個的.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,你並不需要指定類路徑。