Java 9 Jigsaw支持javaagent

Bra*_*adW 8 monitoring agent java-9 java-module

Java 9(特别是Jigsaw)中是否有任何计划来支持Java监视代理程序的特殊要求?

通常,监视代理程序需要能够访问默认情况下不可用于原始Java应用程序的类,包和模块.通过-javaagent命令行参数加载到JVM中的监视代理程序不会作为模块加载,即使jar文件包含module-info.class文件也是如此.我能够为监控代理提供所需权限的唯一方法是添加命令行参数,为所有未命名的模块提供这些权限.

Raf*_*ter 6

所述Instrumentation类被扩展以允许任何模块的重新定义的方法.它允许您添加其他模块读取,导出,打开,服务使用和提供:

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);
Run Code Online (Sandbox Code Playgroud)

此外,ClassFileTransformerAPI已扩展为Module在转换时注册Java :

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

该模块与仪器API相结合,可进行任何必要的调整.

目前,Java代理仍然在类路径上加载而不应用任何模块化; 然而,这可能会随着Java 9尚未最终而改变.