몇 가지 조사 끝에 다음 접근 방식이 가장 좋다는 결론에 도달했습니다.
some / subpackage / Util.groovy
@GrabResolver(name = 'nexus', root = 'https://local-nexus-server:8443/repository/maven-public', m2Compatible = true)
@Grab('com.google.errorprone:error_prone_annotations:2.1.3')
@Grab('com.google.guava:guava:23.0')
@GrabExclude('com.google.errorprone:error_prone_annotations')
import com.google.common.base.Strings
class Util {
void msg(int a, String b, Map c) {
println 'Message printed by msg method inside Util.groovy'
println "Print 5 asterisks using the Guava dependency ${Strings.repeat("*", 5)}"
println "Arguments are a=$a, b=$b, c=$c"
}
}
example.groovy
#!/usr/bin/env groovy
Class clazz = new GroovyClassLoader().parseClass("${new File(getClass().protectionDomain.codeSource.location.path).parent}/some/subpackage/Util.groovy" as File)
GroovyObject u = clazz.newInstance()
u.msg(1, 'b', [a: 'b', c: 'd'])
example.groovy
스크립트 를 실행하려면 시스템 경로에 스크립트를 추가하고 임의의 디렉토리에서 입력하십시오.
example.groovy
스크립트는 다음을 인쇄합니다.
Message printed by msg method inside Util.groovy
Print 5 asterisks using the Guava dependency *****
Arguments are a=1, b=b, c=[a:b, c:d]
위의 예는 다음 환경에서 테스트되었습니다. Groovy Version: 2.4.13 JVM: 1.8.0_151 Vendor: Oracle Corporation OS: Linux
이 예는 다음을 보여줍니다.
- 사용 방법
Util
그루비 스크립트 내 클래스 .
- 타사 라이브러리를 종속성 ( ) 으로 포함하여
Util
호출 하는 클래스 입니다.Guava
Grape
@Grab('com.google.guava:guava:23.0')
Util
클래스는 하위 디렉토리에 상주 할 수 있습니다.
Util
클래스 내의 메서드에 인수 전달 .
추가 의견 / 제안 :
- groovy 스크립트 내에서 재사용 가능한 기능을 위해 항상 groovy 스크립트 대신 groovy 클래스를 사용하십시오. 위의 예는 Util.groovy 파일에 정의 된 Util 클래스를 사용합니다. 재사용 가능한 기능을 위해 groovy 스크립트를 사용하는 것은 문제가 있습니다. 예를 들어, 그루비 스크립트를 사용하는 경우 Util 클래스
new Util()
는를 사용 하여 스크립트의 맨 아래에 인스턴스화되어야 하지만 가장 중요한 것은 Util.groovy가 아닌 이름의 파일에 배치되어야한다는 것입니다. 참조 클래스에 비해 스크립트 그루비 스크립트와 그루비 클래스의 차이점에 대한 자세한 내용은.
- 위의 예에서는
"${new File(getClass().protectionDomain.codeSource.location.path).parent}/some/subpackage/Util.groovy"
대신 경로 를 사용합니다 "some/subpackage/Util.groovy"
. 이렇게하면 Util.groovy
파일이 항상 example.groovy
현재 작업 디렉토리가 아니라 그루비 스크립트의 위치 ( )와 관련하여 찾을 수 있습니다 . 예를 들어를 사용 "some/subpackage/Util.groovy"
하면에서 검색됩니다 WORK_DIR/some/subpackage/Util.groovy
.
- 멋진 스크립트의 이름을 지정하려면 Java 클래스 이름 지정 규칙을 따르십시오. 개인적으로 스크립트가 대문자 대신 소문자로 시작하는 작은 편차를 선호합니다. 예를 들어
myScript.groovy
는 스크립트 이름이고은 MyClass.groovy
클래스 이름입니다. 이름을 지정 my-script.groovy
하면 결과 클래스에 유효한 Java 클래스 이름이 없기 때문에 특정 시나리오에서 런타임 오류가 발생합니다.
- 일반적으로 JVM 세계에서 관련 기능은 JSR 223 : Scripting for the Java 입니다. 특히 Groovy에서는 기능을 Groovy 통합 메커니즘이라고 합니다. 사실, 동일한 접근 방식을 사용하여 Groovy 또는 Java 내에서 JVM 언어 를 호출 할 수 있습니다 . 이러한 JVM 언어의 몇 가지 주목할만한 예는 Groovy, Java, Scala, JRuby 및 JavaScript (Rhino)입니다.