複数のJavaエージェントを使用してJavaプログラムを起動するにはどうすればよいですか?


82

私はJavaエージェントでJavaプログラムを開始する方法を知っています:

java -javaagent:myAgent.jar MyJavaProgram

しかし、プログラムをインストルメント化するために2つ以上のJavaエージェントを追加したい場合はどうなりますか?JVMにロードする必要のあるすべてのエージェントに対してjava-javaagent:...を再起動したくありません。

私はこのようなことを試しました:

java -javaagent:agentA.jar, agentB.jar MyJavaProgram

またはこのようなもの:

java -javaagent:agentA.jar agentB.jar MyJavaProgram

しかし、成功しません。

私の問題を解決するための答えはありますか?

ありがとうございました。

回答:


143

2つのjavaagentパラメータはどうですか?

java -javaagent:agentA.jar -javaagent:agentB.jar MyJavaProgram

57

複数の引数を使用してこれを実行できるように見えます。ドキュメントから:

コマンドラインインターフェイスを使用した実装では、次のオプションをコマンドラインに追加することでエージェントが起動します。

-javaagent:jarpath[=options] 

jarpathは、エージェントJARファイルへのパスです。optionsはエージェントオプションです。このスイッチは、同じコマンドラインで複数回使用できるため、複数のエージェントが作成されます。複数のエージェントが同じjarpathを使用する場合があります。エージェントJARファイルは、JARファイルの仕様に準拠している必要があります。

(私の強調)


2

上記の回答に加えて、antを使用<jvmargs />-javaagentていて、サーバーを起動するために複数のjarを含めたい場合は、次のようにしました。

build.xml

<target name="blah">
...
    <jvmarg value="-javaagent:${jar1.path}" />
    <jvmarg value="-javaagent:${jar2.path}" />
...
</target>

1

複数のJavaエージェントをサポートすることを目的とした新しいプロジェクトがあります。現在、特定のものに限定されています。

エージェントボンドはスーパーエージェントであり、他のいくつかのエージェントをラップしてディスパッチします。そうすれば、JVM内に単一の構成データセット(複数の個別の部分を含む)を使用して単一のエージェントをインストールするだけで済みます。

詳細については、https://github.com/fabric8io/agent-bond/blob/master/README.mdを参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.