Java コンパイラで依存関係のチェックを防止しようとしています。コマンド ライン コンパイルを使用しています。Java ファイルのコンパイル中に依存関係をチェックしないように javac コンパイラに指示する方法はありますか?
3 に答える
... is there any way to tell javac compiler not to check dependencies while compiling a java file ?
The simple answer is No.
Suppose you have some class A
that wants to call some method m
defined by class B
. In order to successfully compile A
, the compiler needs to know that B
is a real class, that it defines the method m
, that it has the expected number and type of arguments, what checked exceptions it throws, and what type of value it returns. Without this information about B
, the compiler cannot compile A
.
And this propagates to the project level. If a class in project P
depends on a class in project Q
, the compiler must have that class (at least) in order to compile the class in P
.
In short, no such compiler option exists, and it is hard to see how it could be implemented it it did.
2 つのプロジェクトが互いに依存している場合、それらは実際には 1 つのプロジェクトであり、一緒にビルドする必要があります。リレーションシップが一方向のリレーションシップである場合でも、最初に依存プロジェクトをビルドしてから、2 番目のプロジェクトをビルドするときにプロジェクトの結果をクラスパスに配置する必要があります。
ほとんどの IDE には、これを管理する機能があります。Eclipse では、1 つのプロジェクトが別のプロジェクトに依存し、依存プロジェクトの出力ファイルが別のプロジェクトのクラスパスに追加されることをマークできます。通常、すべての依存関係は jar としてビルドおよびパッケージ化され、親プロジェクトのコンパイル時にそれらの jar ファイルがクラスパスに配置されます。
依存関係にアクセスせずにコードをビルドすることは非常に難しく、お勧めできません。場合によっては可能な場合もあります。Eclipse は独自のインクリメンタル Java コンパイラを構築しているため、1 つのファイルが変更されるたびにプロジェクト全体を再コンパイルする必要はありません。詳細については、こちらを参照してください。ただし、このようなコンパイラを使用するには、おそらく多くの作業を行う必要があります。
新しい編集を反映するように更新します。
共通ライブラリを構築するには、共通ライブラリがプラットフォーム固有のセクションのクラスに依存してはなりません。Peter Rader が言及したように、これを行う典型的な方法はインターフェースを使用することです。たとえば、共通ライブラリには、イベントを受け取る EventListener インターフェイスを含めることができます。プラットフォーム固有のライブラリでは、そのインターフェイスを実装し、特定のプラットフォームに従ってイベントを処理できます。共通ライブラリは EventListener クラスのみに依存し、特定の実装には依存しないため、コンパイル時にこれらの特定のクラスは必要ありません。
依存関係がある場合、それらは常にチェックされて警告が表示されますが、クラスはとにかくコンパイルされます。
多くの場合、フレームワークは、インターフェースと列挙型を含むapi.jarを提供します。