[java] Java로 플러그인 시스템을 구축하는 가장 좋은 방법

Java 애플리케이션을위한 플러그인 시스템을 어떻게 구현 하시겠습니까?

다음을 달성하기 쉬운 (개발자 용) 시스템을 사용할 수 있습니까?

  • 사용자는 플러그인을 앱의 하위 디렉토리에 넣습니다.
  • 플러그인은 구성 화면을 제공 할 수 있습니다
  • 프레임 워크를 사용하는 경우 라이센스가 상용 개발과 호환됩니까?


답변

먼저 모든 플러그인이 구현해야하는 인터페이스가 필요합니다. 예 :

public interface Plugin {
    public void load(PluginConfiguration pluginConfiguration);
    public void run();
    public void unload();
    public JComponent getConfigurationPage();
}

그런 다음 플러그인 작성자는 플러그인을 JAR 파일로 묶어야합니다. 애플리케이션이 JAR 파일을 연 다음 JAR 매니페스트의 속성 또는 JAR 파일의 모든 파일 목록을 사용하여 플러그인 인터페이스를 구현하는 클래스를 찾을 수 있습니다. 해당 클래스를 인스턴스화하면 플러그인을 사용할 수 있습니다.

물론 어떤 종류의 샌드 박스를 구현하여 플러그인이 할 수있는 것과 할 수없는 것으로 제한되도록 할 수도 있습니다. 나는 두 개의 플러그인으로 구성된 작은 테스트 응용 프로그램 을 작성 했으며 블로그 중 하나는 로컬 리소스에 대한 액세스가 거부되었습니다.


답변

OSGi를 사용하십시오 .

Eclipse 플러그인 시스템의 기초입니다. Equinox 는 Eclipse의 구현 (라이센스가있는 EPL)이고 Felix 는 Apache 프로젝트의 구현 (라이센스가있는 Apache Public License)입니다.

Eclipse는 OSGi가 언급 한 사항을 포괄 할 수있는 구체적인 예를 제공합니다 (또는 전체 Eclipse / SWT / JFace 스택을 원하는 경우 Eclipse RCP 위에 애플리케이션을 빌드 할 수 있음 ).


답변

1.6부터는 간단한 시스템을 코딩하려는 경우 사용할 수있는 java.util.ServiceLoader 가 있습니다.

그러나 기본 기능 이상의 것을 원한다면 기존 프레임 워크 중 하나를 사용하십시오.


답변


답변

PF4J를 사용하십시오 . Web, Spring 및 Wicket을 지원합니다. 사용하기 쉬운 어플리케이션


답변

나는 OSGi에서 일주일 동안 일했습니다. 결국 그것은 나쁜 꿈과 같았지만 많은 것을 배웠습니다.

OSGi를 작동시킬 수있었습니다 (쉬운 것은 아니며 모든 예제가 오래되었습니다. 넷의 모든 것이 5 세가 아닌 경우 3 세 이상임). 그러나 문제로 인해 기존 프로젝트에 통합하는 데 심각한 문제가있었습니다. 항아리가 나타납니다.

간단히 말해서, 매니페스트를 작성하는 데 사용되는 모호한 도구는 거의 없으며 문서화가 잘되어 있지 않습니다 (BND 도구는 모호하지 않지만 Eclipse의 특정 프로세스를 위해 설계되었습니다). 또한 사용 가능한 대부분의 OSGi 정보는 기존 데스크톱 응용 프로그램이있는 응용 프로그램 개발자를 대상으로하지 않습니다.

이로 인해 정보에 대한 맥락이 흐리거나 부적절합니다. Neil Bartlett의 블로그 게시물이 가장 큰 도움이되었지만 작동 시스템을 얻지 못한 사람들도있었습니다 (필릭스 자습서에서 일부 코드를 가져 와서 내장 된 프레임 워크 롤링을 위해 함께 조각했습니다). 필자가 몇 년 전에 무료로 게시 한 책 초안을 찾았지만 Eclipse OSGi 지원 변경으로 인해 Eclipse의 예제가 작동하지 않습니다.

모든 단계는 큰 장애물입니다. 나중에 여기에 더 자세한 내용을 게시하려고합니다.


답변

위에서 언급 한 문제를 해결하기 위해 OSGi를 권장하는 것은 매우 나쁜 조언이라고 생각합니다. OSGi는 “올바른 선택”이지만 위의 시나리오에서는 JPF 또는 자체 개발 한 최소한의 프레임 워크로 충분하다고 생각합니다.