이 경우 javax.tools API이 필요합니다. 따라서 JDK가 작동하도록하려면 최소한 JDK가 설치되어 있어야하며 IDE에서 JRE 대신 IDE를 가리 키도록해야합니다. 테스트 소스 정적 초기화가 완료로
public static void main(String... args) throws Exception {
String source = "public class Test { static { System.out.println(\"test\"); } }";
File root = new File("/test");
File sourceFile = new File(root, "Test.java");
Writer writer = new FileWriter(sourceFile);
writer.write(source);
writer.close();
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, sourceFile.getPath());
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { root.toURI().toURL() });
Class<?> cls = Class.forName("Test", true, classLoader);
}
이, 표준 출력에 test
를 출력한다 : 여기서 (단지 기본적인 예 덜 불투명하게 적절한 예외 부호화 처리없이 기침) 염기성 킥오프 예제 암호. 이러한 클래스가 클래스 패스에 이미있는 특정 인터페이스를 구현하면 더 쉽게 사용할 수 있습니다. 그렇지 않으면 메소드/필드를 액세스하고 호출하기 위해 Reflection API을 참여시켜야합니다.
원본 질문에 "외부 저장 소스 코드"가 지정되었습니다. 마지막으로 클래스 로더를 검사 할 때 소스 코드를 바이트 코드로 컴파일하지 않았습니다. –