jar 파일에서 클래스를 동적으로로드하려고합니다. 우분투 리눅스 박스 (Sun Java 버전 1.6.0_24 (b07))에서 정상적으로 작동했습니다.Windows에서 Java 동적 클래스로드가 실패하지만 Linux에서 정상적으로 작동 중입니다.
Windows (Windows 7, Java 버전 "1.6.0_14")에서 같은 것을 실행하려고하면 클래스 없음 .
try {
String jarFile = "/sqljdbc4.jar";
File newf = new File(jarFile);
System.out.println(newf.getAbsolutePath());
System.out.println("File exists ? :" + newf.exists());
String urlPath = "jar:file://" + newf.getAbsolutePath() + "!/";
System.out.println(urlPath);
ClassLoader cur = Thread.currentThread().getContextClassLoader();
URL[] jarUrlArray = { new URL(urlPath) };
URLClassLoader cl = URLClassLoader.newInstance(jarUrlArray, cur);
Class c = Class.forName(
"com.microsoft.sqlserver.jdbc.SQLServerDriver", true, cl);
Method m[] = c.getMethods();
for (Method mm : m) {
System.out.println(mm.getName());
}
} catch (Exception e) {
e.printStackTrace();
}
리눅스에서 실행, 항아리는 루트 및 Windows 용 배치되는 동안 C에서의 : \ (소스 및 바이너리 C에 어떤 폴더에 있습니다 찾을 예외
다음 코드 \ 그래서 " /sqljdbc4.jar "가 Windows에서 c : \ sqljdbc4.jar로 해석되면 두 플랫폼 모두에 대해 올바른 jar 위치가 클래스 로더에 전달되었는지 확인했습니다.
다음 91,363,210는창
java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:594)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at DemoClass.loadAClass(DemoClass.java:31)
at DemoClass.main(DemoClass.java:14)
참고에 내가 얻을 스택 추적입니다 : 당신은 u는이 밖으로 시도 할 필요가있는 항아리를 사용할 수 있습니다. 나는 MS SQL Server JDBC 드라이버 jar로 놀고 있었다.
감사합니다.
-bbhijeet.
덕분에 많이 bkail을! 그것은 일했다 –
나는 하루 종일 이것으로 고투하고있다. URLClassLoader 확장하기. 다른 많은 Stackoverflow 질문에이 문제가 있습니다. 특히 URLClassLoader 관련. @bkail에게 많은 감사를드립니다. – Koekiebox