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

Piotr Zygielo commented on MRESOLVER-85:
----------------------------------------

{quote} If you use -source 9 -target 8 then javac should produce working code.  
{quote}

Yeah. But no:
{code}
$ javac -source 9 -target 8 C.java 
warning: source release 9 requires target release 1.9
{code}

> 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: 20m
>  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
(v8.20.10#820010)

Reply via email to