入力したコマンドに応じて他のスクリプトを実行するスクリプトがコンピューターにあります。これらのタスクは頻繁に実行され、通常はいくつかの引数のみが必要です (git リポジトリの更新など)。これは bash スクリプトを使用して行われますが、もっと柔軟性を追加したかったので、Java に変換しています。
これらのコマンドを「登録」するために使用される別のファイルがあります。次の構文を使用します。
name, alias1, alias2,... (one or more tabs) path.to.main.class
コマンドが入力されると、ロードする正しいクラスパスを見つけるためにこのファイルが検索されます。
name
出力および適切な jar の検索に使用されるコマンド (および jar) の名前です。次に、 を使用path.to.main.class
してそのクラスをロードします。extends
このクラスは私が作成した抽象クラスであるため、というメソッドをキャストして呼び出しますonCommandRun
。
各コマンドは jar にエクスポートされますが、ほとんどの場合、実行に必要なクラス ファイルは 1 つだけです。3 つのクラスを必要とするコマンドがあります (ただし、それらを同じクラスに貼り付けることもできますが、内部クラスは好きではありません)。
私の問題は、そのjarのメインクラスが正常にロードされることですが、実行する必要がある他の2つのユーティリティクラスのいずれかを使用すると、NoClassDefFoundError
/が表示されますClassNotFoundxception
私の理解では、JVM は必要なときに必要なクラスをロードしますが、なぜ他のクラスのロードに問題があるのでしょうか?
追加: 各「コマンド jar」は、すべてを制御するメインの jar とは別のフォルダーにあります。
余分な#2:各コマンドを独自のjarに分離する理由は、すべてを制御するメインjarが1つのコマンドのみを実行するためです.1つだけが使用されるときにすべてのコマンドを登録(およびロード)するのはなぜですか?プログラムは終了しますか?さらに、動的にしたかったのです。