Hi all,

so today we stumbled over a new type of problem (and I thought I had seen all 
types).
In order to replace the GPL licensed library, direct usages of sun.misc.Unsafe 
were added for getting the sizes of types and arrays in JMV memory.

The main problem is: If we want to compile true Java 8 libraries with any java 
version greater than 8, we need to set the “release” config option in the maven 
plugin. This tells the compiler to cross compile for that java version. It does 
this by checking an index file for that given java version. Problem seems to be 
that for java 8 the sun.misc.Unsafe is not included in this index and the 
compiler therefore fails.

Now there are multiple options to resolve this issue:

We could not use the “release” option, but that could produce Jars that have 
the right java class version, but can’t work on Java 8 because of missing 
types. (Sub-Ideal)

We could create a library, that wraps these calls and which is compiled on Java 
8. So Instead of using the direct calls, we’d use that library instead. However 
this is just tricking the compiler and if in any future version of Java this 
file is moved/removed, things will explode.

As a third option, I see that we could simply define the constants to fixed 
values. These values are really not going to change and I will do a check with 
what the values are on various JDKs and OSes. This option has the advantage, 
that if any of these values would change in future versions, the old data-files 
would not be corrupt. And if we want to Provide TsFiles on other systems than 
Java, we probably need constants anyway.

I have therefore defined these constants in order to get the build working 
again and we’ll continue this discussion to which path we want to go.


Chris

Reply via email to