2

확장 모듈을 만든 다음 다른 프로젝트/스크립트에서는 사용하지만 작동시키지 않으려 고합니다. 내가하는 일이 여기있다 :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 커뮤니티에서 제공 할 수있는 도움에 감사드립니다. :)

답변

0

다음은 나를 위해, 그루비 2.4.5를 사용하여 작동합니다. this post 기준.

첫째, static 방법을 가지고 TemperatureUtils을 변경

class TemperatureUtils { 
    static Double toFahrenheit(Number celcius) { 
     (9 * celcius/5) + 32 
    } 

    static Double toCelcius(Number fahrenheit) { 
     (fahrenheit - 32) * 5/9 
    } 
} 

그런 다음 패키지 유틸, 나는 CompilerConfiguration를 사용하지 것이다하지만 단순히 CLASSPATH을 설정합니다. 예 :

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 shell = new GroovyShell() 
shell.evaluate(groovyScript) 
: Client.groovy는 단순히

$ export CLASSPATH=../utils/build/libs/temp.jar 
$ groovy client.groovy