私は大きなJavaライブラリを持っており、このライブラリとインターフェイスするいくつかの小さなアプリケーションを開発したいと考えています。ライブラリはJARとしてターゲットデバイスのクラスパス上に存在しますが、可能であればコンパイル時にライブラリ全体(JARまたはソースのいずれか)を表示する必要はありません。 (問題がある場合、JARは非常に大きく、私の主な関心事ではないが、知的財産を保護したい。)関連するクラスと関数の定義ヘッダーをプロジェクトに追加し、コンパイル時にパスをインクルードするように追加すると、実行時に動的リンカーがそのジョブを実行できるようになります。JavaのC++ヘッダーファイルに相当しますか?
Javaでこれを行う方法は?私が持っているアイデアの1つは、プライベートメソッド/メンバーを削除し、関連するクラスのメソッドを削除して、ボディが空であり、同じシグネチャを持つ実際のクラスとメソッドが実行時にロードされるようにすることです。しかし、このアプローチはかなり醜いと思われますが、このプロセスを自動化するためにはいくつかのツールが必要になります。これを行うためのツールはありますか?より良い方法がありますか?
私はそれがthis questionと重複しているとは思わない。この問題のポイントは、不要なクラスを削除することによって、コンパイル時に結果として生じるJARファイルのサイズを最小限に抑えることです。私の指摘は、未使用の定義を削除するのではなく、コンパイル時に完全なライブラリJARを持つ必要性を避けることです。これらは類似していて、ProGuardを使って欲しいものを達成する方法があるかもしれませんが、リンクされた質問ではそれについて論じません。
Javaにはヘッダファイルと同等のものはありません。これは非常に、非常に、非常に良いことです。うん、3つの非常にです。 – Michael
[使用されたクラスのみで最小化されたjarを生成する]の可能な複製(http:// stackoverflow。com/questions/9518400/generate-minimized-jar-only-used-classes) – Michael
まあ、ヘッダーファイルは確かに頭痛になることがあります。しかし、それは私の質問のポイントではありませんでした。コンパイル時に知らなくてはならない実装を、Javaでコンパイル時に知る必要があるライブラリインタフェースからどのように分離するかがポイントでした。 –