urlclassloaders의 다른 스레드에서 도움을받은 후 - understanding urlclassloader, how to access a loaded jar's classes 문제가 올바르게 접근하지 못하는 것으로 알고 있습니다.가져 오기 종속성이있는 클래스를 호출하는 java urlclassloader
myPackageA.start
는 myPackageB.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();
}
}
감사
예술
예를 들어 설명해주세요. thx Art –