I can workaround this issue by changing the code to not call setAccessible (and doing class.forName).
I don't know why the existing code does it that way... just another code change, but I think we are fine! On Fri, Sep 11, 2015 at 4:58 PM, Robert Muir <rcm...@gmail.com> wrote: > On Fri, Sep 11, 2015 at 6:09 AM, Alan Bateman <alan.bate...@oracle.com> wrote: >> >> I'm not sure that I understand the issue here but just to say that the >> com.sun.management API is a documented/supported API and it exported by >> module jdk.management: >> >> $ java -listmods:jdk.management >> >> jdk.management@9.0 >> requires public java.management >> requires mandated java.base >> exports com.sun.management >> conceals com.sun.management.internal >> provides sun.management.spi.PlatformMBeanProvider with >> com.sun.management.internal.PlatformMBeanProviderImpl >> > > Here is code that fails: > > import java.lang.reflect.*; > import java.lang.management.*; > > public class test { > public static void main(String args[]) throws Exception { > OperatingSystemMXBean osMxBean = > ManagementFactory.getOperatingSystemMXBean(); > Method getTotalPhysicalMemorySize = > osMxBean.getClass().getMethod("getTotalPhysicalMemorySize"); > getTotalPhysicalMemorySize.setAccessible(true); > System.out.println(getTotalPhysicalMemorySize.invoke(osMxBean)); > } > } > > Exception in thread "main" > java.lang.reflect.InaccessibleObjectException: Unable to make member > of class com.sun.management.internal.OperatingSystemImpl accessible: > module jdk.management does not export com.sun.management.internal to > <unnamed module @5f375618> > at > sun.reflect.Reflection.throwInaccessibleObjectException(java.base@9.0/Reflection.java:462) > at > java.lang.reflect.AccessibleObject.checkCanSetAccessible(java.base@9.0/AccessibleObject.java:194) > at > java.lang.reflect.AccessibleObject.setAccessible(java.base@9.0/AccessibleObject.java:157) > at test.main(test.java:8)