파일 시스템에 하나 이상의 .class 파일을 생성 한 Groovy를 사용하여 Groovy 스크립트를 컴파일했다고합시다. 자바 애플리케이션에서 클래스를로드하고 메소드를 호출하기 위해 클래스를 클래스 경로에 동적으로 추가하려면 어떻게해야합니까? 목표는 Groovy 스크립트를 미리 컴파일하여 데이터베이스에 저장하는 것입니다. 따라서 컴파일 된 버전의 스크립트에서 평가를 수행 할 수 있습니다.클래스 경로에 클래스가 없습니다.
3
A
답변
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
고유 한 클래스 로더를 작성해야합니다.
이 javadoc link에는 사용자 정의 방법을 정의하는 방법의 예가 나와 있습니다.
+0
감사합니다. 그것이 내 프로젝트의 범위에서 가장 좋은 접근 방법이 될지 평가 중입니다. –
관련 문제
- 1. static initializer를 실행하지 않고 클래스가 Java 클래스 경로에 있는지 확인하십시오.
- 2. Visual Studio 2008 클래스 뷰에 클래스가 없습니다.
- 3. 클래스 경로에 파일을 추가
- 4. 로드 클래스가 웹 애플리케이션에서 클래스 경로에 동적으로 있지 않습니다. - 사용자 정의 클래스 로더를 사용하지 않습니다.
- 5. 기본 경로에 ArcSDK.h가 없습니다.
- 6. JBoss에 클래스가 없습니다.
- 7. Eclipse 클래스 경로에 폴더 추가
- 8. "클래스가 등록되지 않았습니다"클래스?
- 9. jQuery 클래스 선택기는 클래스가
- 10. 레일 오류 "jquery.js가 경로에 없습니다 ...."
- 11. SQL 어셈블리에 클래스가 없습니다.
- 12. 배 DB 클래스가 없습니다.
- 13. PDO와 pdo_mysql이로드되었지만 클래스가 없습니다.
- 14. 포함될 때 PHP 클래스가 없습니다.
- 15. 런타임에 웹 사이트 클래스가 없습니다.
- 16. 클래스 경로에 여러 개의 jndi.properties를 정렬합니다.
- 17. JAR 파일 만들기 일부 클래스가 없습니다.
- 18. 클래스 경로에 deploy.jar를 추가하는 방법은 무엇입니까?
- 19. 나는 추상 클래스가 추상 클래스
- 20. 내가 레일 모델 클래스가 클래스
- 21. 내가 같은 클래스가 PHP 클래스
- 22. cxf 서블릿에 리소스 클래스가 없습니다.
- 23. Tomcat 클래스를 찾을 수 없습니다. WEB-INF \ lib 경로에 클래스가 있습니다.
- 24. 클래스 경로에 내가 파일 내용을 읽을려고
- 25. 클래스 경로에 항아리 추가, Eclipse, Android
- 26. Maven systemPath가 런타임 클래스 경로에 추가되지 않았습니다.
- 27. NoClassDefFoundError 클래스 이름이 없습니다.
- 28. PHPUnit이 설치되었지만 PHPUnit_TestCase 클래스가 없습니다.
- 29. java.lang.IllegalArgumentException : enum const 클래스가 없습니다
- 30. 치명적인 오류 : NAME 클래스가 (.... PATH)에 없습니다?
내 경우에는 컴파일 된 Groovy 스크립트를로드하므로 getClass() .class.getClassLoader() 대신 GroovyClassLoader()를 사용합니다. 감사. –