2012-07-21 4 views
0

리플렉션을 사용하여 JAR 파일에서 클래스를로드하려고합니다. 이 JAR 파일에는 다른 JAR 파일에있는 인터페이스를 구현하는 클래스가 있습니다. 인터페이스가 포함 된 JAR 파일은 빌드 경로에 있으므로 프로젝트에서 인식합니다. 이 JAR 파일은 "client"및 "common/lib"인 두 개의 JBoss 6 폴더에도 있습니다.리플렉션을 사용하여 JBoss 6에 JAR 파일로드

java.net.URLClassLoader 클래스의 loadClass 메소드를 사용하여 클래스를 동적으로로드하여 객체를 만들려고 할 때 문제가 발생합니다. ClassNotFoundException는, 프로젝트와 JAR 파일이 공유하는 인터페이스에 관련해 슬로우됩니다. 나는 다음과 같은 방법을 통해 클래스 로더를 취득 해요 : 나는 클래스가 보스에없는 JAR에 대한 참조가 들어있는 파일 변수이기 때문에이 클래스 로더를 사용하여 클래스를로드 할

public static ClassLoader getClassLoader(final String fileName) { 
    final File file = new File(fileName); 
    URL url; 
    ClassLoader classLoader = null; 
    try { 
     url = file.toURL(); 
     final URL[] urls = new URL[]{url}; 
     classLoader = new URLClassLoader(urls); 

    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return classLoader; 
} 

.

JBoss의 다른 폴더에 인터페이스와 함께 JAR을 포함해야합니까?

+0

URLClassLoader 인스턴스를 어떻게 얻습니까? 시도 했는가 : java.lang.Thread.getContextClassLoader(). loadClass()? –

+0

이 방법도 시도했지만 클래스가 현재 스레드에없는 경우 JAR 파일에 있습니다. 나는 더 많은 정보를 제공하기 위해 질문을 편집했다. –

답변

0

Jboss 클래스 경로에있는 클래스 만 참조 할 수 있습니다. jboss로 jar 파일을로드하지 않으면로드 할 방법이 없습니다.

+0

이미 EJB 프로젝트의 클래스 경로에 JAR을 인터페이스와 함께 포함하려고 시도했지만 작동하지 않았습니다. 내 프로젝트에서 인터페이스를 사용하여 JAR 개체를 인스턴스화 할 수 있지만이 인터페이스의 구현이있는 다른 JAR을로드하려고하면 예외가 발생합니다. 가장 이상한 점은 한 컴퓨터에서 제대로 실행되지만 다른 컴퓨터에서는 제대로 실행되지 않는다는 것입니다. 이미 다른 하나에 JBoss와 Eclipse를 모두 복사하려고 시도했지만 여전히 작동하지 않습니다. –

+0

여기를 보시면 도움이 될 것입니다 : http://stackoverflow.com/questions/219585/setting-multiple-jars-in-java-classpath – Tomer

+0

도 확인하십시오 : http://stackoverflow.com/questions/60764/how -should-i-load-jars-dynamic-at-runtime – Tomer

관련 문제