You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Sylwester Lachiewicz (JIRA)" <ji...@apache.org> on 2019/04/11 09:13:00 UTC

[jira] [Created] (MRESOLVER-85) Avoid ByteBuffer incompatibility when compiling with JDK9+

Sylwester Lachiewicz created MRESOLVER-85:
---------------------------------------------

             Summary: Avoid ByteBuffer incompatibility when compiling with JDK9+
                 Key: MRESOLVER-85
                 URL: https://issues.apache.org/jira/browse/MRESOLVER-85
             Project: Maven Resolver
          Issue Type: Improvement
    Affects Versions: 1.3.3, 1.3.2
            Reporter: Sylwester Lachiewicz


Restore possibility to create a release with Java9+

 

The explanation for this is given in [apache/felix#114|https://github.com/apache/felix/pull/114] :

Java 9 introduces overridden methods with covariant return types for the following methods in java.nio.ByteBuffer:

position (int newPosition)
limit (int newLimit)
flip ()
clear ()
mark ()
reset ()
rewind ()
In Java 9 they all now return ByteBuffer, whereas the methods they override return Buffer,
resulting in exceptions like this when executing on Java 8 and lower:
 {{java.lang.NoSuchMethodError: java.nio.ByteBuffer.limit(I)Ljava/nio/ByteBuffer}}
This is because the generated byte code includes the static return type of the method, which is not found on Java 8 and lower because the overloaded methods with covariant return types don't exist (the issue appears even with source and target 8 or lower in compilation parameters).
The solution is to cast ByteBuffer instances to Buffer before calling the method.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)