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

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

    [ https://issues.apache.org/jira/browse/MRESOLVER-85?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16815639#comment-16815639 ] 

Robert Scholte commented on MRESOLVER-85:
-----------------------------------------

You are aware there's a profile that will block the release when trying to run with Java 9 or above?

> 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.2, 1.3.3
>            Reporter: Sylwester Lachiewicz
>            Priority: Minor
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> 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)