I am trying to modify an mvel2 library open source code date 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:
Passsing in null values for ClassLoaded and ProtectionDomain
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?
- 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 latest Java 1.8 version, it is failing.
Can someone suggest a workaround for this?