2010-07-28 6 views
3

파일 시스템에 하나 이상의 .class 파일을 생성 한 Groovy를 사용하여 Groovy 스크립트를 컴파일했다고합시다. 자바 애플리케이션에서 클래스를로드하고 메소드를 호출하기 위해 클래스를 클래스 경로에 동적으로 추가하려면 어떻게해야합니까? 목표는 Groovy 스크립트를 미리 컴파일하여 데이터베이스에 저장하는 것입니다. 따라서 컴파일 된 버전의 스크립트에서 평가를 수행 할 수 있습니다.클래스 경로에 클래스가 없습니다.

답변

9

당신은 디렉토리에서 새로운 클래스를로드 URLClassLoader의 인스턴스를 만들 수 있습니다

URL dirUrl = new URL("file:/" + "path_to_dir" + "/");    // 1 
URLClassLoader cl = new URLClassLoader(new URL[] {dirUrl}, 
          getClass().class.getClassLoader()); // 2 
Class loadedClass = cl.loadClass("com.xyz.MyClass"); 
MyClass obj = (MyClass) loadedClass.newInstance(); 
obj.doSomething(); 

1 호선은 .class 파일이있는 디렉토리에 URL을 만듭니다.

2 행은 새로운 URLClassLoader 인스턴스를 만듭니다. 첫 번째 인수는 소스로 사용될 URL 배열입니다. 배열 내에 여러 디렉토리 URL을 지정할 수 있습니다. 두 번째 인수는이 새로운 클래스 로더의 부모가 될 클래스 로더입니다. 위의 코드를 실행하는 클래스의 클래스 로더를이 인수로 전달합니다.

하위 클래스 로더에 의해로드 된 클래스는 상위 클래스 로더가로드 한 클래스에 액세스 할 수 있습니다.

+0

내 경우에는 컴파일 된 Groovy 스크립트를로드하므로 getClass() .class.getClassLoader() 대신 GroovyClassLoader()를 사용합니다. 감사. –

0

고유 한 클래스 로더를 작성해야합니다.

javadoc link에는 사용자 정의 방법을 정의하는 방법의 예가 나와 있습니다.

+0

감사합니다. 그것이 내 프로젝트의 범위에서 가장 좋은 접근 방법이 될지 평가 중입니다. –

관련 문제