0

シェルコマンドを傍受できる方法を知りたい

次のようなJavaプログラムをコンパイルするコマンドを実行している間

javac xxx.java

他のコマンドのセットを同様に実行することにより、コンパイルの前にxxx.javaファイルをインストルメント化するプログラムのセットをシェルに実行させたいです。

./instrument xxx.java

その後、JVMを呼び出してコンパイルする必要があります。シェルでコマンドをインターセプトすることは可能ですか?そうでない場合、システムのユーザーが自分のコードがインストルメントされていることに気付かずにそれを達成するにはどうすればよいですか?

4

2 に答える 2

3

ビルドツールが必要なようです。 Mavenは優れた選択肢であり、他にもさまざまな優れた選択肢があります ( antgradle、 make など)。ビルド ツールを使用すると、複雑な一連のアクションを結び付けて、毎回それらの手順を指定することなく、最終的なアーティファクトを生成できます。

于 2013-02-22T17:16:31.810 に答える
0

ご質問の解釈によります。卑劣なことをしようとしているように聞こえますが、Maven ビルドを使用しないでください。

あなたが望むのは、同じ名前でプログラムのバージョンをインターセプトして実行することです。基本的に、という実行可能ファイルを作成する必要があります

javac

これは、実際の javac とまったく同じパラメーターを受け取ります。次に、プログラムで、必要なインストルメンテーションをファイルでパラメーターとして実行できます。最後に、JAVA_HOME または元の Java bin ディレクトリへのパスを保持する環境変数を検索することで、実際の javac を呼び出すことができます。

お使いのバージョンの javac を優先するには、それを PATH 環境変数の HEAD に追加する必要があります。これにより、最初にプログラム名がチェックされるようになります。Linuxでは、これでそれを行います

PATH=/usr/myPrograms/java/bin:$PATH

注: ユーザーが javac への絶対フルパスを明示的に入力した場合、このソリューションは機能しません。

于 2013-02-22T17:20:24.477 に答える