Groovy Keine Signatur der Methode aufrufende Java-Bibliothek

So viele Fragen beginnen, dieses fährt mich verrückt.

Ich habe eine selbstgezogene StarTeam java-Bibliothek. Ich habe eine statische Methode wie diese:

public static Label getLatestDeploymentLabel(com.starbase.starteam.File child) {
 //blah
}

Die Methode funktioniert wie erwartet, wenn ich es aufrufen java. Wenn ich es aufrufen Groovy, den ich bekommen:

Caught: groovy.lang.MissingMethodException: 
No signature of method: static pkg.starteam.StarTeamUtils.getLatestDeploymentLabel() 
is applicable for argument types: (com.starbase.starteam.File) 
values: [FILENAME-FOO.sql] at starteam.run(starteam.groovy:54)

Habe ich in einem println Recht, bevor ich nenne diese Methode:

chgset.elements().each() { item ->
  println "type of item is ${item.class.getName()}"
  def latestlabel = StarTeamUtils.getLatestDeploymentLabel(item)
}

Bestätigen, dass, in der Tat, es ist die Iteration von dem, was ich erwarte, es ist die Iteration über:

type of item is com.starbase.starteam.File

Ich habe gesehen, ein paar andere ähnliche Fragen in anderen Beiträgen in Bezug auf statische Methoden und die Antworten sind entlang der Linien von "sind Sie sicher, es ist eine statische Methode?". Ich bin sicher, es ist eine statische Methode.

Gibt es nicht viel groovy-code zu dieser. Was es ist es ist alles enthalten in einem einzigen Skript im default-package. Die main-Methode wird dann als implizit, und es ist in den Körper des script-Klasse, die den Aufruf aus der java-Bibliothek ist gemacht. Ich den classpath in einer DOS-batch-wrapper-Skript, z.B.:

SET INITIALCLASSPATH=%CLASSPATH%
SET NEWCP=c:/libs/etc.jar;c:/etc/etc.jar
SET GROOVYPATH=c:/groovy.bat
SET CLASSPATH=%NEWCP%
%GROOVYPATH% %*
SET CLASSPATH=%INITIALCLASSPATH%

Habe ich eine einfache situation, die ich denke emuliert meine situation.

C:\apps\groovy-1.8.6\scripts>type Other.java
class Other {
    private String name = "notset";
    public Other(String name) {
        this.name = name;
        System.out.println("Created an other");
    }
    public String toString() {
        return name;
    }
}
C:\apps\groovy-1.8.6\scripts>type ThingList.java
import java.util.ArrayList;
import java.util.Iterator;

class ThingList {
    ArrayList ourlist = new ArrayList<Other>();
    public ThingList(){}
    public ArrayList add(Other thing) {
        ourlist.add(thing);
        return ourlist;
    }
    public Iterator iterator(){
        return ourlist.iterator();
    }
}
C:\apps\groovy-1.8.6\scripts>type JavaLib.java
class JavaLib {
    public JavaLib() {}
    public static ThingList getThingList(Other thing) {
        ThingList tl = new ThingList();
        Other one = new Other("extra one");
        tl.add(thing);
        tl.add(one);
        return ThingList;
    }
}
C:\apps\groovy-1.8.6\scripts>type testthing.groovy
def myOther = new Other("A new other")
println "type of myOther is ${myOther.class.getName()}"
def myList = getThingList(myOther)
myList.each() {
  println it
}
C:\apps\groovy-1.8.6\scripts>type wrapper.bat
@ECHO OFF
SET INITIALCLASSPATH=%CLASSPATH%
SET GROOVY=C:\apps\groovy-1.8.6\bin\groovy.bat
SET CP=.
SET CLASSPATH=%CP%

%GROOVY% %*

SET CLASSPATH=%INITIALCLASSPATH%
C:\apps\groovy-1.8.6\scripts>wrapper.bat testthing.groovy
Created an other
type of myOther is Other
Caught: groovy.lang.MissingMethodException: No signature of method: testthing.ge
tThingList() is applicable for argument types: (Other) values: [A new other]
groovy.lang.MissingMethodException: No signature of method: testthing.getThingLi
st() is applicable for argument types: (Other) values: [A new other]
        at testthing.run(testthing.groovy:3)

C:\apps\groovy-1.8.6\scripts>

Irgendwelche Erkenntnisse oder Anregungen würde sehr geschätzt werden!

AndyJ

InformationsquelleAutor AndyJ | 2012-10-12

Schreibe einen Kommentar