You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Pierre De Rop (JIRA)" <ji...@apache.org> on 2018/10/17 14:17:00 UTC

[jira] [Comment Edited] (FELIX-5967) DM does not support java9+

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

Pierre De Rop edited comment on FELIX-5967 at 10/17/18 2:16 PM:
----------------------------------------------------------------

Fixed in revision revision 1844108.

The fluent service properties have been deprecated , and currently only work using java8, and will be removed in next version. 

So, you can now build dm with java9+ (9,10,11).

For java11, take care to use the --no-daemon option when launching gradlew command:
{code:java}
./gradlew --no-daemon org.apache.felix.dependencymanager.annotation:jar
./gradlew --no-daemon jar
./gradlew --no-daemon check
{code}


was (Author: pderop):
Fixed in revision revision 1844108.

The fluent service properties have been deprecated , and currently only work using java8, and will be removed in next version. 

> DM does not support java9+
> --------------------------
>
>                 Key: FELIX-5967
>                 URL: https://issues.apache.org/jira/browse/FELIX-5967
>             Project: Felix
>          Issue Type: Improvement
>    Affects Versions: org.apache.felix.dependencymanager-r8
>            Reporter: Pierre De Rop
>            Assignee: Pierre De Rop
>            Priority: Major
>
> Dependency Manager can't be built/used on java9+ (9,10,11), because of the following issues:
> 1) for configuration types, when we parse interface "default methods", the way we are parsing does not work in java 9+, and a patch must be applied.
> See [1].
> 2) for dm-lambda, the way to parse the lambda parameter names for "fluent" service properties (which requires the -parameters javac option) does not  work in java 9+. 
> For example, the following does not work
> {code:java}
> compnent(comp -> comp.impl(Foo.class).provides(FooService.class, property -> "service property value"));{code}
> So, the "property" lambda parameter name can't be parsed in Java9+. This is likely because starting from java9, the -parameters option is not generating anymore the metadata for the lambda parameter names (see [2]).  For the moment, the fluent service properties willl work only using java8, but not anymore on java9+, and the most reasonable thing is to deprecate the usage of fluent service properties, meaning that instead of:
> {code:java}
> compnent(comp -> comp.impl(Foo.class).provides(FooService.class, property -> "service property value"));{code}
> you then must replace by:
> {code:java}
> compnent(comp -> comp.impl(Foo.class).provides(FooService.class, "property","service property value"));{code}
> So, the fluent service properties must be commented as in restriction if java9+ is used. No need to bump the dm-lambda bundle version, becaue it still works using java8.
> 3) the gradle version needs to be updated, and for java11 support, the "--no-daemon" option must be used when building.
> [1]  [https://dzone.com/articles/correct-reflective-access-to-interface-default-methods]
> [2]https://bugs.openjdk.java.net/browse/JDK-8138729



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