Java 10 Support
I have a project where I use your library. With Java 8 it works, with Java 10 I get the following exception:
Exception in thread "" java.lang.reflect.InaccessibleObjectException: Unable to make field private static final jdk.internal.misc.Unsafe jdk.internal.misc.InnocuousThread.UNSAFE accessible: module java.base does not "opens jdk.internal.misc" to unnamed module @2c35e847
I am using this library on Java 10-12 without issues. My guess is that you are using different JVM settings or perhaps using a SecurityManager. Do you have a small reproduction case for this?
I also faced this issue in our project after upgrading our production environment from java 8 to java 11. The starting part of the exception looks this way:
java.lang.reflect.InaccessibleObjectException: Unable to make field private jdk.internal.reflect.MethodAccessorImpl jdk.internal.reflect.DelegatingMethodAccessorImpl.delegate accessible: module java.base does not "opens jdk.internal.reflect" to unnamed module @7dbe2ebf
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:340)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:280)
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:176)
at java.base/java.lang.reflect.Field.setAccessible(Field.java:170)
at com.rits.cloning.Cloner.addAll(Cloner.java:530)
at com.rits.cloning.Cloner.allFields(Cloner.java:544)
at com.rits.cloning.Cloner.cloneObject(Cloner.java:440)
at com.rits.cloning.Cloner.cloneInternal(Cloner.java:431)
at com.rits.cloning.Cloner.cloneObject(Cloner.java:453)
at com.rits.cloning.Cloner.cloneInternal(Cloner.java:431)
at com.rits.cloning.Cloner.cloneObject(Cloner.java:453)
at com.rits.cloning.Cloner.cloneInternal(Cloner.java:431)
at com.rits.cloning.Cloner.cloneObject(Cloner.java:453)
at com.rits.cloning.Cloner.cloneInternal(Cloner.java:431)
at com.rits.cloning.Cloner.cloneObject(Cloner.java:453)
at com.rits.cloning.Cloner.cloneInternal(Cloner.java:431)
at com.rits.cloning.Cloner.cloneObject(Cloner.java:453)
at com.rits.cloning.Cloner.cloneInternal(Cloner.java:431)
at com.rits.cloning.Cloner.deepClone(Cloner.java:301)
It is probably trying to clone an object in java.base that requires it to copy a private field. You can bypass these kinds of checks with JVM startup options but I don't really know what the appropriate long term solution is because this is the intent of module system.
JVM option to bypass this check: --add-opens java.base/jdk.internal.reflect=ALL-UNNAMED
It might be useful to know what class it was trying to clone as you might implement a FastCloner that gets around the issue.