2014-01-13 3 views
0

После некоторой помощи в другом потоке на urlclassloaders - understanding urlclassloader, how to access a loaded jar's classes У меня есть вопрос по следующему вопросу, поскольку я не думаю, что я правильно подошел к проблеме.java urlclassloader, который вызывает класс, который имеет зависимость от импорта

myPackageA.start имеет URLClassLoader призывающую myPackageB.comms
myPackageB.comms имеет зависимость к import org.jgroups.JChannel форме /home/myJars/jgroups-3.4.2.Final.jar со следующим кодом

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 и работает, как ожидалось.

Мой вопрос howit можно установить -cp в сценарии так работает импорт при использовании ниже код для вызова myPackageB.SimpleChat из 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(); 
    } 
} 

благодаря
Art

ответ

0

Просто добавьте URL для jgroups-3.4.2.Final.jar до массива URL-адресов URLClassLoader's.

+0

не могли бы вы привести мне пример, thx Art –

Смежные вопросы