0

ユーザーが「プラグイン」を作成できるようにするプログラムを作成しようとしています。Linux bash シェルがファイルをディレクトリに置くことでコマンドを追加できるように、ユーザーが自分のコードをディレクトリに置いてプログラムを実行できるようにしようとしています。

これを行うには、次のいくつかの方法を考えました。

  1. どうにかして独自のスクリプト言語を作成し、それを使用してユーザーにプラグインを作成してもらいます
  2. Java がサポートする既存のスクリプト言語を見つけ、それを使用してユーザーがプラグインを作成できるようにする
  3. ユーザーに Java でプラグインを作成してもらい、プログラムの実行時にコンパイルしてもらいます。

3 つのオプションはすべてかなり悪いように見えますが、これが私が考えることができるすべてであり、オプション 3 が 3 つの中で最良のように思えました。そのため、いくつかの調査を行ったところ、Java 1.6 以降がファイルのランタイム コンパイルをサポートしていることがわかりました。ただし、ユーザーが作成したコードが、基本プログラムにある特定のクラスを参照している場合、コンパイラが失敗するかどうかはわかりません。通常はそうなりますが、私のプログラムがそれをコンパイルしているので、コンパイラーが基本プログラムのクラスの使用を許可するかどうかはわかりません。

理想的には、これをユーザーにとってできるだけ簡単にしたいと思います。私の主な質問は、コンパイラーが私の基本プログラムでクラスを参照する際に問題が発生するかどうかです。すべてのクラスに .jar を含めて、ユーザーが開発中にそれをライブラリとして使用する必要はありません。私が言ったように、私はこれがユーザーにとって簡単であることを望んでおり、理想的には、可能な限り解釈された言語に近いものであるべきです. そのため、ユーザーがコンパイルに煩わされる必要がないように、プログラムの実行時にこれを行いたいと考えています。.java ファイルをディレクトリに配置してプログラムを実行するだけです。

コンパイラがクラスに問題を起こすかどうか、またはこれに対処するためのより良い方法を誰かが知っていれば、それは素晴らしいことです!

ありがとう!

4

1 に答える 1

1

ほとんどの場合、Java アプリケーションのプラグインはすべて Java で記述されています。プラグインは、多くの潜在的に悪いものを公開するため、扱いにくいビジネスです。

スクリプト言語を Java にコンパイルする場合は、OK です。必ず:

  1. Java クラスを作成しますhttp://www.javabeat.net/the-java-6-0-compiler-api/
  2. スクリプトでできることとできないことの一連のルールを確立します。
  3. その Java クラスに公開する API Jar への参照を使用してコンパイラを呼び出します (コンパイラが参照チェーンをたどることができるように)
  4. API jar ではなく、Java クラスのみを現在の ClassLoader の Sub ClassLoader にロードします。http://www.javaworld.com/article/2077260/learn-java/the-basics-of-Java-class-loaders.html

現在ロードされているのと同じ API jar を使用してターゲット *.java をコンパイルする場合、クラス参照に問題はありません。クラス タイプ エラーが発生するため、サブ クラスローダーに API JAR をロードしないでください。

スクリプト エンジンについては、LuaJava を参照してください。

http://www.keplerproject.org/luajava/manual.html

于 2014-08-26T23:17:10.273 に答える