확장 모듈을 만든 다음 다른 프로젝트/스크립트에서는 사용하지만 작동시키지 않으려 고합니다. 내가하는 일이 여기있다 :Groovy 확장 모듈을 사용할 수 없습니다.
Step-1 : 카테고리와 비슷한 클래스 인 TemperatureUtils.groovy라는 파일을 생성했다.
moduleName=Some-Utils
moduleVersion=1.0
extensionClasses=utils.TemperatureUtils
staticExtensionClasses=
스텝 3 : 컴파일 된 클래스 - :
package utils
class TemperatureUtils {
Double toFahrenheit(Number celcius) {
(9 * celcius/5) + 32
}
Double toCelcius(Number fahrenheit) {
(fahrenheit - 32) * 5/9
}
}
스텝 2 : org.codehaus.groovy.runtime.ExtensionModule 다음과 같은 내용으로 확장 모듈 기술자 만든 다음 소스입니다 그리고 다음과 같은 구조의 jar 파일을 손으로 만든 :
extensionUtils.jar
|-- utils
| |-- TemperatureUtils.class
|
|-- META-INF
|-- services
|-- org.codehaus.groovy.runtime.ExtensionModule
스텝 4 : 확장 모듈을 사용하는 새로운 스크립트를 만들었습니다. 스크립트 소스 :
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)
5 단계 : 스크립트를 실행하십시오. 여기에, 나는 다음과 같은 예외가 점점 오전 : 이제
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)
을, 나는 몇 가지를 시도했지만 작동 가져올 수 없습니다 :
- 은 마지막 줄 제거 -으로부터 "staticExtensionClasses ="를 확장 모듈 설명자가 있지만 작동하지 않습니다.
- @Category (Number) 주석을 사용하고 두 메소드에서 인수를 제거하여 메소드의 'celcius'및 'fahrenheit'매개 변수 대신 'this'를 사용하여 TemperatureUtils.groovy 클래스를 실제 카테고리로 변경했습니다. '몸)하지만 여전히 작동하지 않았다.
- 봤지만 많은 정보를 찾지 못했습니다. 또한 this에 비틀 거 렸지만, 그게 도움이되지 못했습니다.
놀라운 stackoverflow 커뮤니티에서 제공 할 수있는 도움에 감사드립니다. :)