Ich versuche, ein Erweiterungsmodul zu erstellen und es dann in einem anderen Projekt/Skript zu verwenden, aber es nicht zum Funktionieren zu bringen. Hier ist, was ich tue:Groovy-Erweiterungsmodul kann nicht funktionieren
Schritt-1: Erstellt eine Datei mit dem Namen TemperatureUtils.groovy, die eine Kategorie-ähnliche Klasse ist. Hier ist die Quelle:
package utils
class TemperatureUtils {
Double toFahrenheit(Number celcius) {
(9 * celcius/5) + 32
}
Double toCelcius(Number fahrenheit) {
(fahrenheit - 32) * 5/9
}
}
Schritt-2: Erstellt das Erweiterungsmodul Descriptor - org.codehaus.groovy.runtime.ExtensionModule mit folgendem Inhalt:
moduleName=Some-Utils
moduleVersion=1.0
extensionClasses=utils.TemperatureUtils
staticExtensionClasses=
Step-3: Zusammengestellt der Klasse und hand-created eine jar-Datei mit der folgenden Struktur:
Schritt-4: Erstellt ein neues Skript für die Verwendung des Erweiterungsmoduls. Skriptquelle:
import org.codehaus.groovy.control.CompilerConfiguration
def groovyScript = '''
//Following line just confirms that the jar file is indeed on the classpath of this script
assert 25 == (new utils.TemperatureUtils()).toCelcius(77)
//Actually using the category now
assert 77.toCelcius() == 25
assert 25.toFahrenheit() == 77
'''
def compilerConfig = new CompilerConfiguration()
compilerConfig.setClasspath(/E:\temp\jar\extensionUtils.jar/)
def shell = new GroovyShell(compilerConfig)
shell.evaluate(groovyScript)
Schritt-5: Skript ausgeführt. Hier bin ich die folgende Ausnahme erhalten:
groovy.lang.MissingMethodException: No signature of method: java.lang.Integer.toCelcius() is applicable for argument types:() values: []
at Script1.run(Script1.groovy:6)
at ConsoleScript2.run(ConsoleScript2:16)
Jetzt habe ich ein paar Dinge ausprobiert, aber konnte es nicht arbeiten:
- entfernt die letzte Zeile - „staticExtensionClasses =“ von der Erweiterungsmodul Deskriptor, aber es hat nicht funktioniert.
- Die TemperatureUtils.groovy-Klasse wurde zu einer tatsächlichen Kategorie geändert, indem die Annotation @Category (Number) verwendet und die Argumente beider Methoden entfernt wurden (und 'them' anstelle von 'celcius' und 'fahrenheit' in Methoden verwendet wurde) "Körper), aber es hat immer noch nicht funktioniert.
- Google hat es gegoogelt aber nicht viele Informationen gefunden. Stolperte auch über this, aber das half mir auch nicht.
Würde mich über jede Hilfe freuen, die die wunderbare stackoverflow Community bieten kann! :)