2008-08-24 3 views
30

플러그인으로 확장 할 수있는 Java 프로그램을 만들고 싶습니다. 어떻게해야하고 어디에서 찾을 수 있습니까?플러그인 가능한 Java 프로그램을 만드는 방법은 무엇입니까?

플러그인이 구현해야하는 일련의 인터페이스가 있으며 병에 있어야합니다. 프로그램은 상대 (프로그램에) 폴더에있는 새 항아리를보고 어떻게 든 등록해야합니다.


이클립스 RCP가 좋긴하지만, 나는 그것이 내 간단한 필요를 위해 너무 많다고 생각한다.

봄에도 똑같은 일이 생겼지 만, 어쨌든 보려고했기 때문에 시도해 볼 수도 있습니다.

그래도 가능한 한 간단하게 "프레임 워크"라는 자체 플러그인을 만드는 방법을 찾고 싶습니다.

+0

가능한 중복 http://stackoverflow.com/questions/465099/best-way-to-build-a-plugin-system-with-java). 이것은 더 빠르지 만, 다른 하나는 결국 더 대중적이되었습니다. –

답변

37

, 매우 편리합니다 . 먼저 모든 '플러그인'클래스를 구현해야하는 인터페이스를 작성했습니다. 그런 다음 Java ClassLoader을 사용하여 해당 클래스를로드하고 인스턴스를 작성했습니다.

MyModule modInstance = (MyModule)loadedClass.newInstance(); 
: 지금 당신은 인터페이스 이름을 가정의 인스턴스를 생성 할 필요가 클래스를로드

File dir = new File("put path to classes you want to load here"); 
URL loadPath = dir.toURI().toURL(); 
URL[] classUrl = new URL[]{loadPath}; 

ClassLoader cl = new URLClassLoader(classUrl); 

Class loadedClass = cl.loadClass("classname"); // must be in package.class name format 

가 인 MyModule입니다 : 당신이 그것에 대해 갈 수

한 가지 방법이있다

+0

나는이 스레드에서 조금 늦었다는 것을 알고 있지만, 디렉토리의 모든 주어진 클래스를 반복하여로드하고 싶다면 어떻게해야할까요? 거기에 어딘가에서 작동하는 구현 및 온라인 코드를 볼 수 있습니까? 그 외, 나는 대부분의 코드와 그 매우 간단한 감사를 이해합니다! +1 –

+1

@CodyRichardson 간단한 구현의 완전한 예가 http://www.knowbase.org/viewtopic.php?id=31에 있습니다. Java 8과 Gradle 4를 사용합니다. – Alexiy

+0

@Alexiy 그 링크를 가져 주셔서 감사합니다. 그것은 많은 도움이되었고, 기본적으로 필요한 모든 것입니다. 처음에는 약간 복잡했는데 (주로 람다), 그저 자바 멍청이라서 ... :) 나는 몇 번 이상 그것을 보았고 훨씬 더 의미가있었습니다. 고마워! –

1

Eclipse의 리치 클라이언트 플랫폼 위에 구축 한 다음 Eclipse 확장 프레임 워크를 노출했다고 생각하십니까?

또한, 필요에 따라, 스프링 프레임 워크는 그와 함께 도움이 될 다른 것들 당신이 수행 할 수 있습니다 : 나는 과거에 작성한 소프트웨어에 대한 이런 짓을 한 http://www.springframework.org/

14

the Java Service Provider (SPI) API을 자세히 살펴 보는 것이 좋습니다. 이것은 특정 서비스를 구현하는 것으로 드러나는 클래스 패스의 모든 Jar에있는 모든 클래스를 찾는 간단한 시스템을 제공합니다. 나는 과거에 플러그인 시스템을 사용하여 큰 성공을 거두었습니다.

+2

sun.misc.Service 클래스는 java.util.ServiceLoader 클래스로 대체되었습니다. –

16

OSGi을 살펴보십시오. 한편

은은 OSGi는 관리, 시작 및 모듈 형 소프트웨어 구성 요소와 다른 것들의 많은 작업을 수행하기위한 인프라의 모든 종류를 제공합니다. 다른 한편으로는, 그것은 당신의 요구에 너무 무거울 수 있습니다.

덧붙여서 Eclipse는 OSGi를 사용하여 플러그인을 관리합니다.

+1

+1 for OSGi. 나는 간단한 ClassLoader 속임수 (재발견 할 바퀴가 많이 남을 것)와 Eclipse RCP (복잡한 작업이 아닌 큰 프레임 워크) 사이에서 적당한 크기를 찾았다. – Leonel

4

가정에서 성장한 클래스 로더 접근법 : 클래스 로더에 대해 배우는 좋은 방법은 "클래스 로더 지옥"이라고하는 것입니다.이 프로그램은 큰 프로젝트에서 사용할 때 주로 씨름하는 사람들이 잘 알고 있습니다. 충돌하는 클래스는 소개하기 쉽고 해결하기가 어렵습니다.

그리고 이클립스가 몇 년 전에 OSGi로 이주한 이유가 있습니다. 그래서 애완 동물 프로젝트가 더 중요하다면 OSGi를 심각하게 살펴보십시오. 그것의 가치있는보고. 새로운 기술 표준을 추가 한 클래스 로더에 대해 배우게됩니다.

6

기본 플러그인 지원이 필요한 경우 (대부분의 경우에 해당) 받아 들여지는 해결책이지만, 적절한 설명서가 없어도 매우 세련된 Java Plugin Framework (JPF)도 있습니다. 플러그인 프레임 워크 구현.

이것은 쉽게 배포 할 수 있으며 클래스 로딩 된 idiosynchrasies를 통해 얻을 때 매우 쉽게 개발할 수 있습니다. 위의 주석은 플러그인 디렉토리 아래의 플러그인로드 경로가 전체 클래스 경로와 함께 클래스 파일을 path라는 일반 패키지 경로에 배포하는 것 외에도 이름을 지정해야한다는 점에 유의해야합니다. 예 :

plugins 
`-com.my.package.plugins 
    `-com 
    `-my 
     `-package 
     `-plugins 
      |- Class1.class 
      `- Class2.class 
[자바 플러그인 시스템을 구축하는 가장 좋은 방법] (의
관련 문제