Re: Maven project: method defineClass in class sun.misc.Unsafe cannot be applied to given types with latest Java version.

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Re: Maven project: method defineClass in class sun.misc.Unsafe cannot be applied to given types with latest Java version.

Amit Mathapati
My bad, I had forgotten to attach my pom.xml file.



On Sun, Jul 26, 2020 at 7:47 PM Amit Mathapati <[hidden email]> wrote:


Hello Users,


I am trying to modify an mvel2 library open source code dating back from < 2010. https://github.com/mvel/mvel

THis is a maven project.

I recently downloaded the source code and when I tried to compile the project, it gives an error message.

public Class<?> defineClassX(String className, byte[] b, int off, int len) {
        if (sunJVM) {
            return ((Unsafe) sunUnsafe).defineClass(className, b, off, len);
        }
        else {
            return super.defineClass(className, b, off, len);
        }
    }
Error message: Error:(59,40) java: method defineClass in class sun.misc.Unsafe cannot be applied to given types;

mvel2 2.0.16 seems to have built with Java 1.5 but in my recent environment it is Java 1.8 and the "defineClass" method definition has changed.

New Method definition in Java 1.8 :

public native Class<?> defineClass(String var1, byte[] var2, int var3, int var4, ClassLoader var5, ProtectionDomain var6);

What is the workaround for this?

Some options I tried:

  1. Passing in null values for ClassLoaded and ProtectionDomain

  2. in pom.xml, under:

    <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <encoding>UTF-8</encoding>
                    <compilerArgs>
                        <compilerArg>-XDignore.symbol.file</compilerArg>
                    </compilerArgs>
                </configuration>
            </plugin>
      a) I tried passing in 1.5 but it fails with same error
      b) Tried the compilerArgs but no luck either?
  1. Tip from VGR below in the comments to remove the if(sunJVM) block causes all test cases to fail when building the maven package.

I feel the issue seems to be that, since the source code package was built with Java 1.5 and now since I am building with the latest Java 1.8 version, it is failing.

Can someone suggest a workaround for this?



---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

pom.xml (9K) Download Attachment