2014-01-13 3 views
0

urlclassloaders의 다른 스레드에서 도움을받은 후 - understanding urlclassloader, how to access a loaded jar's classes 문제가 올바르게 접근하지 못하는 것으로 알고 있습니다.가져 오기 종속성이있는 클래스를 호출하는 java urlclassloader

myPackageA.startmyPackageB.comms
myPackageB.comms 다음 코드

package myPackageB; 

    import org.jgroups.JChannel; 

    public class SimpleChat { 
    JChannel channel; 
    String user_name=System.getProperty("user.name", "n/a"); 

     private void start() throws Exception { 
      channel=new JChannel(); 
      channel.connect("ChatCluster"); 
      channel.getState(null, 10000); 
      channel.close(); 
     } 

     public static void main(String[] args) throws Exception { 
      new SimpleChat().start(); 
     } 
    } 

일반적으로 내가 java -cp /home/myJars/jgroups-3.4.2.Final.jar:myPackageB myPackageB.SimpleChat에 위의 코드를 호출하는 것와 import org.jgroups.JChannel 형태 /home/myJars/jgroups-3.4.2.Final.jar에 대한 종속성이 예상대로 실행을 요구하는 URLClassLoader를있다.

내 질문은 아래의 코드를 사용하여 가져 오기 작품은 그냥 URL을 추가 java -cp myPackageA.jar myPackageA.start

package myPackageA; 
import java.lang.reflect.Field; 
import java.lang.reflect.Method; 
import java.net.URL; 
import java.net.URLClassLoader; 

public class start 
{ 
    Class<?> clazz; 

    private void start() throws Exception 
    { 
     if (this.clazz == null) 
      throw new Exception("The class was not loaded properly"); 

     Object mySc = this.clazz.newInstance(); 
     Method sC = this.clazz.getDeclaredMethod("main", String[].class); 
     String[] params = null; 
     sC.invoke(mySc, (Object) params); 
    } 

    public void loadSc() throws Exception 
    { 
     URL classUrl; 
     classUrl = new URL("file:///home/myJars/myPackageB.jar"); 
     URL[] classUrls = { classUrl }; 
     URLClassLoader ucl = new URLClassLoader(classUrls); 
     Class<?> c = ucl.loadClass("myPackageB.SimpleChat"); 
     this.clazz = c; 
    } 

    public static void main(String[] args) throws Exception 
    { 
     start startnow = new start(); 
     startnow.loadSc(); 
     startnow.start(); 
    } 
} 

감사
예술

답변

0

에서 myPackageB.SimpleChat를 호출 할 수 있도록 스크립트 내에서 -cp을 설정할 수 howit됩니다 jgroups-3.4.2.Final.jar ~ URLClassLoader's 개의 URL 배열

+0

예를 들어 설명해주세요. thx Art –

관련 문제