우리는 독립 실행 형 Java 응용 프로그램을 가지고 있습니다. 이 응용 프로그램에는 많은 기능이 있지만 대부분의 고객은이 기능을 약간만 사용합니다. 우리는 타사 jar 파일의 "정상적인"최소값으로 응용 프로그램을 배포하려고합니다. 이클립스 프로젝트에서 모든 외부 jar 파일은 클래스 경로에 있습니다. 따라서 수업을 시작하는 데 반사가 사용되지 않습니다. 따라서 사용자가 웹캠 사진을 찍는 등보다 고급 기능을 사용하려고 할 때 우리는 모든 javacv jar 파일을 다운로드 한 다음 사진을 찍는 클래스를 호출하기 전에 클래스 패스/클래스 로더에이를 추가합니다. 이것이 가능한가? 필자는 매우 작은 모듈을위한 해결책을 가지고 있습니다. 즉, jar 파일을 즉시 다운로드하여 사용자 정의 클래스 로더에 추가하는 것이지만, 모든 클래스를 고통스럽게 인스턴스화해야하고 모든 메소드를 리플렉션으로 호출해야합니다. 예를 들면 :리플렉션없이 런타임에 jar 파일을 클래스 경로에 추가 및 추가
URLClassLoader loader = new URLClassLoader(urls,w.getClass().getClassLoader());
Class grabberClass = Class.forName("org.bytedeco.javacv.FrameGrabber",true,loader);
Object grabber = grabberClass.getMethod("createDefault", int.class).invoke(null, 0);
grabberClass.getMethod("start", null).invoke(grabber, null);
//And so on...
이 우리가 원하는 것이 아니다. 우리의 모든 소스 코드는 괜찮 았고, 리플렉션 호출로 변환하여 난독 화하고 싶지 않습니다. 하지만 어떻게하면 기존 코드를 사용할 수 있으며 런타임에 jar 파일을 추가 할 수 있습니까?
답변 해 주셔서 감사합니다. 전에 webstart를 사용했지만 lazy-option에 대해 몰랐습니다. 이것은 내가 원하는 것을하는 것처럼 보입니다. 나는 크리스마스 후에이 해결책을 시도 할 것이다. – runholen