EsotericSoftware / reflectasm

High performance Java reflection
BSD 3-Clause "New" or "Revised" License
1.53k stars 222 forks source link

Warnings with Java 9 #64

Open zedaster opened 6 years ago

zedaster commented 6 years ago
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.esotericsoftware.reflectasm.AccessClassLoader (file:/C:/Users/Сергей/.m2/repository/com/esotericsoftware/reflectasm/1.11.7/reflectasm-1.11.7.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.esotericsoftware.reflectasm.AccessClassLoader
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
rarcher commented 6 years ago

Some of my users are also seeing this. See rarcher/couch-potato-server#27 for a discussion.

magro commented 5 years ago

An option might be to create a multi release jar (aka MRJAR) and use a different way for Java 9+ to defineClass (MethodHandles.Lookup.defineClass).

TheMode commented 5 years ago

Any update?

NathanSweet commented 5 years ago

Can ignore or disable the warning.

cowwoc commented 5 years ago

@NathanSweet Obviously. But can't the underlying problem be fixed?

NathanSweet commented 5 years ago

I'm not sure, I haven't looked into it. It's not a problem yet though, it's just a warning. It won't be a problem until they disallow what the library needs to function. At that time we either fix it or the library won't work on the latest JVMs. That is the case for a great many libraries.

cowwoc commented 5 years ago

@NathanSweet For what it's worth, @magro explained how to fix this problem. Simply replace ClassLoader.defineClass with MethodHandles.Lookup.defineClass

NathanSweet commented 5 years ago

If that works, great! I just haven't had the time or personal need to dig into it.

jfida commented 5 years ago

Any news on this?

thawkins commented 5 years ago

I'm running into this too, any idea of when a fix may be available.

iverhun commented 4 years ago

Just FYI: still the same warning with java 13

magro commented 4 years ago

Sorry I'm too busy with other things, but maybe someone could come up with a PR for multi-release jar?

robinverduijn commented 4 years ago

I tried to implement the suggestion of using MethodHandles.lookup().defineClass() instead of ClassLoader.defineClass(), but only got as far as https://github.com/robinverduijn/reflectasm/compare/fix-code-warnings...robinverduijn:fix-illegal-reflective-access. It left me with the warning gone but two tests failing. At that point I got stuck, but maybe someone else can figure out how to make it work from there?

dwing4g commented 4 years ago

try this:

// suppress "An illegal reflective access operation has occurred" in JDK9+ if (!System.getProperty("java.version").startsWith("1.") && !MethodAccess.class.getModule().isNamed()) Class.class.getModule().addOpens(Class.class.getPackageName(), MethodAccess.class.getModule());

soundasleep commented 3 years ago

In a similar vein to EsotericSoftware/kryo#626, could you support a System property (-Dreflectasm.unsafe=false) or something so that we can stop this error message from appearing (and ideally start to get ready for when illegal access is removed)? 🙏