2017-02-22 8 views
8

Java監視エージェントの特別な要件をサポートする予定のJava 9(特にJigsaw)はありますか?Java 9のジグソーパズルサポート

通常、監視エージェントでは、元のJavaアプリケーションにデフォルトでは使用できないクラス、パッケージ、およびモジュールにアクセスする必要があります。 jarファイルにmodule-info.classファイルが含まれていても、-javaagentコマンドライン引数を使用してJVMにロードされたエージェントを監視することは、モジュールとしてロードされません。監視エージェントに必要なアクセス許可を与えることができる唯一の方法は、コマンドライン引数を追加して、これらのアクセス許可をすべての名前のないモジュールに追加することです。

答えて

6

Instrumentation class was extended任意のモジュールの再定義を可能にする方法。それはあなたが追加モジュールを追加することができます読み込み、輸出、開き、サービスの使用法およびprovidings:

void redefineModule(Module module, 
        Set<Module> extraReads, 
        Map<String,Set<Module>> extraExports, 
        Map<String,Set<Module>> extraOpens, 
        Set<Class<?>> extraUses, 
        Map<Class<?>,List<Class<?>>> extraProvides); 

また、ClassFileTransformer APIは、変換時にJavaのModuleを登録するために拡張されました:

default byte[] transform(Module module, 
         ClassLoader loader, 
         String className, 
         Class<?> classBeingRedefined, 
         ProtectionDomain protectionDomain, 
         byte[] classfileBuffer) 
        throws IllegalClassFormatException; 

このモジュール、インスツルメンテーションAPIと組み合わせることで、必要な調整が可能です。

現在、Javaエージェントはモジュール化を適用せずにクラスパスにロードされています。ただし、これはJava 9がまだ最終的なものではないため変更できます。

+0

ありがとうございます。これは多くの助けとなりました。新しいredefineModule()メソッドを試してみました。必要な処理をしているようです – BradW

関連する問題