2016-08-24 32 views
2

開発者のデバッグを支援するjavaagentを書きました。しかし、このツールを公開する前に、java-agentのデプロイメントに関していくつか質問が残っています。サードパーティのlibs依存関係でjavaagentを展開する方法

ユーザーはいくつかのTomcatアプリケーションでエージェントを使用できます。エージェントは、Premainメソッドを使用してクラスを変換します。 javassist 3.18.2-GAを使用してコードを挿入します。現在、MANIFEST.MFのBoot-Class-Pathにjavassist.jarを追加しています。また、エージェントとjavassist.jarの両方をtomcatのlibディレクトリに置きます。

質問は以下のとおりです。

  1. まあ、少なくともとして、それが動作します。しかし、Tomcatアプリケーションのエージェントと依存関係を展開する正しい方法はありますか?
  2. ほとんどのTomcatアプリケーションは、javassist 3.18.2-GAを使用しているhibernateを使用しているので、今は大丈夫です。しかし私の理解として、3.20は3.18.2と完全には互換性がありません。誰かがjavassistをより高いバージョンに更新したことを提案します.2つの異なるjavassistの間の競合のために、エージェントまたはアプリケーションがクラッシュします。

答えて

2

javaagentが追加され、VMのクラスパス上で実行されます。したがって、次のオプションがあります。

  1. 通常のアプリケーションをデプロイするときなど、VMを起動するときにクラスパスに依存関係を追加します。 Tomcatのようなアプリケーションコンテナの場合、これはそのような依存関係のための適切なディレクトリになります。
  2. fatjarのようなツールを使用してエージェントとの依存関係をバンドルします。そうすることで、Maven Shadeプラグインを使用して、バージョンの競合を避けるために依存関係を別の名前空間に転送することもできます。
  3. Instrumentation APIを使用して、実際のエージェントアプリケーションを実行する前に依存関係を手動で追加します。
関連する問題