나는 두 개의 클래스가 있습니다 항아리에 MainClaz
에서자바의 클래스 경로에 추가 된 새 Jar에서 클래스를 자동으로로드하는 방법은 무엇입니까?
MainClaz
MyTest2
,
public class MainClaz {
public static void main(String[] args) throws InterruptedException {
while (true) {
try {
Class aClass = Class.forName("com.test.MyTest2");
Object t = aClass.newInstance();
} catch (Exception e) {
System.out.println("Exception For MyTest2 ");
}
Thread.sleep(10000);
try {
Class aClass = Class.forName("com.test.MyTest3");
Object t = aClass.newInstance();
} catch (Exception e) {
System.out.println("Exception For MyTest3 ");
e.printStackTrace();
}
}
}
}
내가 포장 한 두 클래스를 JAR (1)에 넣어 클래스 패스.
MyTest3
은 여기에 존재하지 않으므로 ClassNotFoundException
이 계속 표시됩니다.
이제 말하십시오 ... MyTest3
클래스를 포함하는 새 병 (Jar 2)을 만들고이 jar를 클래스 경로 폴더에 복사하십시오.
클래스에 다른 새로운 jar 파일에 MyTest3
클래스를 넣었으므로 클래스 경로에서 MyTest3
을 찾아야하지만 ClassNotFoundException
을 던지고 있습니다.
어떻게 작동합니까?
요구 사항에 더 많은 정보를 추가 : 지금 클래스 이름으로
는 하드 코딩되어있다. 그러나 그들은 외부 소스로부터 읽혀질 것입니다 (어떤 데이터베이스라고합시다). 하지만 나는 클래스 경로의 새로운 항아리에 새로운 클래스를 추가하고 클래스의 정규화 된 클래스 이름을 데이터베이스에 추가하여 루프 프로그램의 다음 반복에서 동적으로 클래스를로드 할 수 있도록합니다. 새 항아리의
당신은 동적으로 이미로드 된 클래스 로더의 클래스 경로 (기본 클래스 로더를) 수정할 수 없습니다에서 적어도 나는 방법을 알지 못한다. 기본값을 바꾸려면 JVM을 다시 시작해야합니다. 그러나 클래스 로더의 새 인스턴스를 만들고 새 클래스 로더를 새 클래스 로더에로드 한 다음 새 클래스 로더를 사용하여 해당 클래스를 사용할 수 있으므로 요구 사항을 자세히 작성하십시오. – SGM1