0

私はJavaでプラグインベースのプログラムを構築しています。これにより、プロジェクトをクローズドソースのままにしておきたいのですが、サードパーティの開発者がプラグインを作成できるようにします。私が使用しているシステムは機能していますが、それは私が(もちろん)ソースコードに完全にアクセスできるからです。

基本的に、プラグインはPlugin.javaを継承し、特定の重要な機能を実行するためにServerManager.javaを利用する場合があります。ユーザーが完全なソースを提供せずに、これらのクラスのインターフェイスを表示できるようにするにはどうすればよいですか(つまり、ServerManagerにsendMessage()関数があり、プラグインクラスがonMessage()関数をオーバーライドできることを知っています)。

Objective-Cのバックグラウンドから来て、私はこれらの「インターフェース」に.hファイルを使用し、ソース(プライベート)に.mファイルを使用します–その後は.hファイルのみを提供します–明らかにJavaにはそのようなものはありませんただし、.hファイルです。

前もって感謝します :)

4

4 に答える 4

3

1つの方法は、インターフェースを作成し、それを公開して、そのインターフェースの実装を提供することです。

例えば:

interface Light{
    void turnOn();
    void turnO();
    void setBrightness(int newValue);
    void setTimer(int timeoutSeconds);
}

次に、プライベートファイルで実際のクラスを定義します。

class MyLight implements Light {
    void turnOn() {
      // implementation
    }
    // etc..
}

MyLightオブジェクトをユーザーに提供するFactoryクラスを提供できます。

于 2013-01-28T11:49:53.507 に答える
1

そのJavaには、SPI、サービスプロバイダーインターフェイスがあります。ここに記事があります。

このメカニズムは、独自のライブラリに最適な、公開されているインターフェイスを備えています。

(いくつかの)実装者は、META-INFの下のインターフェース名を持つテキストファイルで指定された1つ(または複数)の実装クラスを備えたjarを提供します。

次に、Javaには、1つの実装を選択するか、すべてをリストするAPIがあります。

これは比較的単純で用途の広いメカニズムです。公式のjavadocを調べてください。XML実装の場合、これが使用されます。

于 2013-01-28T11:54:34.610 に答える
0

コアコードが誰にも見られないようにしたい場合は、必要なコードを難読化できます。プラグインを作成するためにクライアントに公開する部分は、難読化からスキップできます。

于 2013-01-28T12:01:49.073 に答える
0

ここに似たようなものを点在させることができます。オープンソースインターフェイスを作成すると、クライアントは自分の側で実装を行います。

ほとんどのJavaEEの世界はこのように機能します。たとえば、このhttp://jsr311.java.net/nonav/javadoc/index.htmlのようなインターフェース定義があり、複数の異なるベンダー実装があります。同様に、コードには、プラグインへのアクセスに使用するインターフェイスが含まれます。

同様の実装の1つは、ソースの特定のライセンスがない限り製品がクローズドソースであるAtlassian Confluenceによって実行されますが、プラグイン開発は完全に分離されています:https ://developer.atlassian.com/display/CONFDEV/Confluence+Plugin+Guide

于 2013-01-28T12:21:46.863 に答える