micronaut-projects / micronaut-profiles

Repository for the profiles (project templates for the CLI) used to create Micronaut applications
63 stars 42 forks source link

Upgrade gradle-build template to Gradle 5.x #124

Closed aalmiray closed 5 years ago

aalmiray commented 5 years ago

Gradle 5 brings a host of features, including native BOM support which is 3X times faster than Spring's dependency-management plugin. The following snippet shows an update build file for an application created with mn create-app greach

plugins {
    id "application"
    id "com.github.johnrengelman.shadow" version "5.0.0"
}

version "0.1"
group "greach"

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    compile enforcedPlatform('io.micronaut:micronaut-bom:1.0.4')
    annotationProcessor "io.micronaut:micronaut-inject-java:1.0.4"
    annotationProcessor "io.micronaut:micronaut-validation:1.0.4"
    compile "io.micronaut:micronaut-inject"
    compile "io.micronaut:micronaut-validation"
    compile "io.micronaut:micronaut-runtime"
    compile "io.micronaut:micronaut-http-client"
    compile "io.micronaut:micronaut-http-server-netty"
    compileOnly "io.micronaut:micronaut-inject-java"
    runtime "ch.qos.logback:logback-classic:1.2.3"
    testCompile "junit:junit:4.12"
    testCompile "io.micronaut:micronaut-inject-java"
    testCompile "org.hamcrest:hamcrest-all:1.3"
}

shadowJar {
    mergeServiceFiles()
}

run.jvmArgs('-noverify', '-XX:TieredStopAtLevel=1')

mainClassName = "greach.Application"
tasks.withType(JavaCompile){
    options.encoding = "UTF-8"
    options.compilerArgs.add('-parameters')
}

Notice that:

melix commented 5 years ago

It would really be good to get rid of compile and runtime. You should use implementation and runtimeOnly instead: the compile and runtime configurations leak dependencies to downstream consumers, so kill the overall build performance. Details in https://gradle.com/blog/dependency-management-with-gradle-fundamentals/

graemerocher commented 5 years ago

Yeah we tried that at one point but there are issues for us as importing the project into IntelliJ didn’t setup the class path correctly

There still appear to be issues with this today with the latest versions of IntelliJ and Gradle

melix commented 5 years ago

I'm not aware of any issue. Just make sure to check "use separate module per source set". Otherwise clearly the setup is incorrect.

graemerocher commented 5 years ago

@melix @aalmiray I have upgraded the example application on a branch to Gradle 5.3 and your recommendations https://github.com/micronaut-projects/micronaut-examples/tree/gradle53/hello-world-java

The following problems exist:

  1. If I import the project into IntelliJ 2019.1 then the classpath is incorrectly setup so that many of the dependencies are Provided scope.
Screenshot 2019-04-04 at 14 10 27

This means if I run the Application class in Intellij it fails with the following exception due to a misconfigured classpath:

14:08:28.181 [main] ERROR io.micronaut.runtime.Micronaut - Error starting Micronaut server: Error loading bean [io.micronaut.http.server.netty.converters.FileUploadToObjectConverter]: io/micronaut/http/codec/MediaTypeCodecRegistry
io.micronaut.context.exceptions.BeanContextException: Error loading bean [io.micronaut.http.server.netty.converters.FileUploadToObjectConverter]: io/micronaut/http/codec/MediaTypeCodecRegistry
    at io.micronaut.context.DefaultBeanContext.lambda$findBeanCandidates$30(DefaultBeanContext.java:1287)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
  1. If I add the eclipse plugin and then run ./gradlew eclipse and then open the project in Eclipse or Visual Studio Code Java (using code .) then run the tests the test fails with the error:
Stack trace:
org.junit.jupiter.engine.execution.ConditionEvaluationException: Failed to evaluate condition [io.micronaut.test.extensions.junit5.MicronautJunit5Extension]: @MicronautTest used on test but no bean definition for the test present. This error indicates a misconfigured build or IDE. Please add the 'micronaut-inject-java' annotation processor to your test processor path (for Java this is the testAnnotationProcessor scope, for Kotlin kaptTest and for Groovy testCompile). See the documentation for reference: https://micronaut-projects.github.io/micronaut-test/latest/guide/
    at org.junit.jupiter.engine.execution.ConditionEvaluator.evaluationException(ConditionEvaluator.java:91)
    at org.junit.jupiter.engine.execution.ConditionEvaluator.evaluate(ConditionEvaluator.java:80)
    at org.junit.jupiter.engine.execution.ConditionEvaluator.lambda$evaluate$2(ConditionEvaluator.java:66)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)

The reason for this error is that the annotation processors are not correctly configured.

None of these problems exist with the previous approach we were using.

How can we get passed these issues and use the approach you recommend?

aalmiray commented 5 years ago

Hi Graeme, thank you for having a look at this. First I’d like to check if the build works as expected in the command line. My simple test appeared to work but you and your team would be able to tell much better.

Does the output of gradle dependencies look right to you? If so then Gradle may be working correctly on the command line and we’ll have to look into specific IDE support. If it does not look right then we have to deep dive into gradle dependency management.

Is the test project available?

graemerocher commented 5 years ago

The test project is on the gradle53 branch https://github.com/micronaut-projects/micronaut-examples/tree/gradle53/hello-world-java

The application works as expected when using gradle run or gradle test

The problems seem to stem from IDE import handling

melix commented 5 years ago

There is indeed something fishy. Not sure why some dependencies end up in "provided" in IDEA... At least you can run by delegating build/run to Gradle.

graemerocher commented 5 years ago

@melix Yes that is a nice feature of 2019.1 but it should work without it and it should work in Eclipse which doesn’t have such support

Note that importing the maven build works in all IDEs without problems

melix commented 5 years ago

I understand, my comment doesn't imply there's no issue. There's something fishy that needs a fix.

graemerocher commented 5 years ago

@melix would you like me to report Gradle issues for the above? Or do you want to look into it first?

aalmiray commented 5 years ago

There's indeed something fishy going on. Checked out the gradle53 branch at 5c6228a and imported the project in Intellij (2018.3) and got the following

mn-ij

Notice that:

When resolving dependencies on the command line we get

Using gradle at '/tmp/micronaut-examples/hello-world-java/gradlew' to run buildfile '/tmp/micronaut-examples/hello-world-java/build.gradle':

> Task :dependencies

------------------------------------------------------------
Root project
------------------------------------------------------------

annotationProcessor - Annotation processors and their dependencies for source set 'main'.
+--- io.micronaut:micronaut-inject-java:1.1.0.RC2
|    \--- io.micronaut:micronaut-inject:1.1.0.RC2
|         +--- javax.inject:javax.inject:1
|         +--- io.micronaut:micronaut-core:1.1.0.RC2
|         |    +--- org.slf4j:slf4j-api:1.7.25
|         |    +--- org.reactivestreams:reactive-streams:1.0.2
|         |    \--- com.google.code.findbugs:jsr305:3.0.2
|         +--- org.yaml:snakeyaml:1.23
|         \--- javax.annotation:javax.annotation-api:1.3.2
+--- io.micronaut:micronaut-validation:1.1.0.RC2
|    +--- org.slf4j:slf4j-api:1.7.25
|    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    +--- io.micronaut:micronaut-http:1.1.0.RC2
|    |    \--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    \--- javax.validation:validation-api:2.0.1.Final
\--- io.micronaut.configuration:micronaut-openapi:1.1.0.RC2
     +--- org.slf4j:slf4j-api:1.7.25
     +--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
     +--- io.micronaut:micronaut-validation:1.1.0.RC2 (*)
     +--- io.swagger.core.v3:swagger-core:2.0.4
     |    +--- javax.xml.bind:jaxb-api:2.3.0
     |    +--- org.apache.commons:commons-lang3:3.7
     |    +--- org.slf4j:slf4j-api:1.7.25
     |    +--- com.fasterxml.jackson.core:jackson-annotations:2.9.5
     |    +--- com.fasterxml.jackson.core:jackson-databind:2.9.5
     |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -> 2.9.5
     |    |    \--- com.fasterxml.jackson.core:jackson-core:2.9.5
     |    +--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.9.5
     |    |    +--- org.yaml:snakeyaml:1.18 -> 1.23
     |    |    \--- com.fasterxml.jackson.core:jackson-core:2.9.5
     |    +--- io.swagger.core.v3:swagger-annotations:2.0.4
     |    +--- io.swagger.core.v3:swagger-models:2.0.4
     |    |    \--- com.fasterxml.jackson.core:jackson-annotations:2.9.5
     |    \--- javax.validation:validation-api:1.1.0.Final -> 2.0.1.Final
     +--- io.swagger.core.v3:swagger-models:2.0.4 (*)
     \--- io.swagger.core.v3:swagger-annotations:2.0.4

apiElements - API elements for main. (n)
No dependencies

archives - Configuration for archive artifacts.
No dependencies

compile - Dependencies for source set 'main' (deprecated, use 'implementation' instead).
No dependencies

compileClasspath - Compile classpath for source set 'main'.
+--- io.micronaut:micronaut-inject-java -> 1.1.0.RC2
|    \--- io.micronaut:micronaut-inject:1.1.0.RC2
|         +--- javax.inject:javax.inject:1
|         +--- io.micronaut:micronaut-core:1.1.0.RC2
|         |    +--- org.slf4j:slf4j-api:1.7.25
|         |    +--- org.reactivestreams:reactive-streams:1.0.2
|         |    \--- com.google.code.findbugs:jsr305:3.0.2
|         +--- org.yaml:snakeyaml:1.23
|         \--- javax.annotation:javax.annotation-api:1.3.2
+--- io.micronaut:micronaut-bom:1.1.0.RC2
|    +--- io.micronaut:micronaut-http-client:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-http-server-netty:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-inject-java:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-runtime:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-validation:1.1.0.RC2 (c)
|    +--- io.swagger.core.v3:swagger-annotations:2.0.4 (c)
|    +--- io.micronaut:micronaut-http-netty:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-websocket:1.1.0.RC2 (c)
|    +--- io.netty:netty-handler-proxy:4.1.30.Final (c)
|    +--- org.slf4j:slf4j-api:1.7.25 (c)
|    +--- io.reactivex.rxjava2:rxjava:2.2.6 (c)
|    +--- io.micronaut:micronaut-http-server:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-core:1.1.0.RC2 (c)
|    +--- javax.annotation:javax.annotation-api:1.3.2 (c)
|    +--- org.yaml:snakeyaml:1.23 (c)
|    +--- io.micronaut:micronaut-aop:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-http:1.1.0.RC2 (c)
|    +--- com.fasterxml.jackson.core:jackson-databind:2.9.8 (c)
|    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8 (c)
|    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8 (c)
|    +--- javax.cache:cache-api:1.1.0 (c)
|    +--- javax.validation:validation-api:2.0.1.Final (c)
|    +--- org.reactivestreams:reactive-streams:1.0.2 (c)
|    +--- io.micronaut:micronaut-buffer-netty:1.1.0.RC2 (c)
|    +--- io.netty:netty-codec-http:4.1.30.Final (c)
|    +--- io.netty:netty-handler:4.1.30.Final (c)
|    +--- io.netty:netty-codec-socks:4.1.30.Final (c)
|    +--- io.netty:netty-transport:4.1.30.Final (c)
|    +--- io.micronaut:micronaut-router:1.1.0.RC2 (c)
|    +--- com.google.code.findbugs:jsr305:3.0.2 (c)
|    +--- com.fasterxml.jackson.core:jackson-core:2.9.8 (c)
|    +--- com.fasterxml.jackson.core:jackson-annotations:2.9.8 (c)
|    +--- io.netty:netty-buffer:4.1.30.Final (c)
|    +--- io.netty:netty-codec:4.1.30.Final (c)
|    +--- io.netty:netty-resolver:4.1.30.Final (c)
|    \--- io.netty:netty-common:4.1.30.Final (c)
+--- io.swagger.core.v3:swagger-annotations:2.0.4
+--- io.micronaut:micronaut-inject -> 1.1.0.RC2 (*)
+--- io.micronaut:micronaut-validation -> 1.1.0.RC2
|    +--- org.slf4j:slf4j-api:1.7.25
|    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    +--- io.micronaut:micronaut-http:1.1.0.RC2
|    |    \--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    \--- javax.validation:validation-api:2.0.1.Final
+--- io.micronaut:micronaut-runtime -> 1.1.0.RC2
|    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    +--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    +--- io.micronaut:micronaut-aop:1.1.0.RC2
|    |    \--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    +--- javax.validation:validation-api:2.0.1.Final
|    +--- javax.cache:cache-api:1.1.0
|    +--- com.fasterxml.jackson.core:jackson-databind:2.9.8
|    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -> 2.9.8
|    |    \--- com.fasterxml.jackson.core:jackson-core:2.9.8
|    +--- io.reactivex.rxjava2:rxjava:2.2.6
|    |    \--- org.reactivestreams:reactive-streams:1.0.2
|    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8
|    |    +--- com.fasterxml.jackson.core:jackson-core:2.9.8
|    |    \--- com.fasterxml.jackson.core:jackson-databind:2.9.8 (*)
|    \--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8
|         +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -> 2.9.8
|         +--- com.fasterxml.jackson.core:jackson-core:2.9.8
|         \--- com.fasterxml.jackson.core:jackson-databind:2.9.8 (*)
+--- io.micronaut:micronaut-http-client -> 1.1.0.RC2
|    +--- org.slf4j:slf4j-api:1.7.25
|    +--- io.reactivex.rxjava2:rxjava:2.2.6 (*)
|    +--- io.micronaut:micronaut-http-netty:1.1.0.RC2
|    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    +--- io.micronaut:micronaut-buffer-netty:1.1.0.RC2
|    |    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    |    +--- io.micronaut:micronaut-core:1.1.0.RC2 (*)
|    |    |    \--- io.netty:netty-buffer:4.1.30.Final
|    |    |         \--- io.netty:netty-common:4.1.30.Final
|    |    +--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    |    +--- io.micronaut:micronaut-websocket:1.1.0.RC2
|    |    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    |    +--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    |    |    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    |    |    +--- io.micronaut:micronaut-aop:1.1.0.RC2 (*)
|    |    |    \--- io.reactivex.rxjava2:rxjava:2.2.6 (*)
|    |    +--- io.netty:netty-codec-http:4.1.30.Final
|    |    |    \--- io.netty:netty-codec:4.1.30.Final
|    |    |         \--- io.netty:netty-transport:4.1.30.Final
|    |    |              +--- io.netty:netty-buffer:4.1.30.Final (*)
|    |    |              \--- io.netty:netty-resolver:4.1.30.Final
|    |    |                   \--- io.netty:netty-common:4.1.30.Final
|    |    +--- io.reactivex.rxjava2:rxjava:2.2.6 (*)
|    |    \--- io.netty:netty-handler:4.1.30.Final
|    |         +--- io.netty:netty-buffer:4.1.30.Final (*)
|    |         +--- io.netty:netty-transport:4.1.30.Final (*)
|    |         \--- io.netty:netty-codec:4.1.30.Final (*)
|    +--- io.micronaut:micronaut-runtime:1.1.0.RC2 (*)
|    +--- io.netty:netty-handler-proxy:4.1.30.Final
|    |    +--- io.netty:netty-transport:4.1.30.Final (*)
|    |    +--- io.netty:netty-codec-socks:4.1.30.Final
|    |    |    \--- io.netty:netty-codec:4.1.30.Final (*)
|    |    \--- io.netty:netty-codec-http:4.1.30.Final (*)
|    \--- io.micronaut:micronaut-websocket:1.1.0.RC2 (*)
\--- io.micronaut:micronaut-http-server-netty -> 1.1.0.RC2
     +--- org.slf4j:slf4j-api:1.7.25
     +--- io.micronaut:micronaut-http-server:1.1.0.RC2
     |    +--- io.micronaut:micronaut-runtime:1.1.0.RC2 (*)
     |    +--- io.micronaut:micronaut-router:1.1.0.RC2
     |    |    +--- org.slf4j:slf4j-api:1.7.25
     |    |    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
     |    |    \--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
     |    \--- io.micronaut:micronaut-websocket:1.1.0.RC2 (*)
     \--- io.micronaut:micronaut-http-netty:1.1.0.RC2 (*)

compileOnly - Compile only dependencies for source set 'main'.
\--- io.micronaut:micronaut-inject-java FAILED

default - Configuration for default artifacts.
+--- io.micronaut:micronaut-bom:1.1.0.RC2
|    +--- io.micronaut:micronaut-http-client:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-http-server-netty:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-runtime:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-validation:1.1.0.RC2 (c)
|    +--- io.swagger.core.v3:swagger-annotations:2.0.4 (c)
|    +--- org.slf4j:slf4j-api:1.7.25 (c)
|    +--- io.micronaut:micronaut-http-netty:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-websocket:1.1.0.RC2 (c)
|    +--- io.netty:netty-handler-proxy:4.1.30.Final (c)
|    +--- io.reactivex.rxjava2:rxjava:2.2.6 (c)
|    +--- io.micronaut:micronaut-http-server:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-core:1.1.0.RC2 (c)
|    +--- javax.annotation:javax.annotation-api:1.3.2 (c)
|    +--- org.yaml:snakeyaml:1.23 (c)
|    +--- io.micronaut:micronaut-aop:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-http:1.1.0.RC2 (c)
|    +--- com.fasterxml.jackson.core:jackson-databind:2.9.8 (c)
|    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8 (c)
|    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8 (c)
|    +--- javax.cache:cache-api:1.1.0 (c)
|    +--- javax.validation:validation-api:2.0.1.Final (c)
|    +--- org.reactivestreams:reactive-streams:1.0.2 (c)
|    +--- io.micronaut:micronaut-buffer-netty:1.1.0.RC2 (c)
|    +--- io.netty:netty-codec-http:4.1.30.Final (c)
|    +--- io.netty:netty-handler:4.1.30.Final (c)
|    +--- io.netty:netty-codec-socks:4.1.30.Final (c)
|    +--- io.netty:netty-transport:4.1.30.Final (c)
|    +--- io.micronaut:micronaut-router:1.1.0.RC2 (c)
|    +--- com.google.code.findbugs:jsr305:3.0.2 (c)
|    +--- com.fasterxml.jackson.core:jackson-core:2.9.8 (c)
|    +--- com.fasterxml.jackson.core:jackson-annotations:2.9.8 (c)
|    +--- io.netty:netty-buffer:4.1.30.Final (c)
|    +--- io.netty:netty-codec:4.1.30.Final (c)
|    +--- io.netty:netty-resolver:4.1.30.Final (c)
|    \--- io.netty:netty-common:4.1.30.Final (c)
+--- io.swagger.core.v3:swagger-annotations:2.0.4
+--- io.micronaut:micronaut-inject -> 1.1.0.RC2
|    +--- javax.inject:javax.inject:1
|    +--- io.micronaut:micronaut-core:1.1.0.RC2
|    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    +--- org.reactivestreams:reactive-streams:1.0.2
|    |    \--- com.google.code.findbugs:jsr305:3.0.2
|    +--- org.yaml:snakeyaml:1.23
|    \--- javax.annotation:javax.annotation-api:1.3.2
+--- io.micronaut:micronaut-validation -> 1.1.0.RC2
|    +--- org.slf4j:slf4j-api:1.7.25
|    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    +--- io.micronaut:micronaut-http:1.1.0.RC2
|    |    \--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    \--- javax.validation:validation-api:2.0.1.Final
+--- io.micronaut:micronaut-runtime -> 1.1.0.RC2
|    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    +--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    +--- io.micronaut:micronaut-aop:1.1.0.RC2
|    |    \--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    +--- javax.validation:validation-api:2.0.1.Final
|    +--- javax.cache:cache-api:1.1.0
|    +--- com.fasterxml.jackson.core:jackson-databind:2.9.8
|    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -> 2.9.8
|    |    \--- com.fasterxml.jackson.core:jackson-core:2.9.8
|    +--- io.reactivex.rxjava2:rxjava:2.2.6
|    |    \--- org.reactivestreams:reactive-streams:1.0.2
|    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8
|    |    +--- com.fasterxml.jackson.core:jackson-core:2.9.8
|    |    \--- com.fasterxml.jackson.core:jackson-databind:2.9.8 (*)
|    \--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8
|         +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -> 2.9.8
|         +--- com.fasterxml.jackson.core:jackson-core:2.9.8
|         \--- com.fasterxml.jackson.core:jackson-databind:2.9.8 (*)
+--- io.micronaut:micronaut-http-client -> 1.1.0.RC2
|    +--- org.slf4j:slf4j-api:1.7.25
|    +--- io.reactivex.rxjava2:rxjava:2.2.6 (*)
|    +--- io.micronaut:micronaut-http-netty:1.1.0.RC2
|    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    +--- io.micronaut:micronaut-buffer-netty:1.1.0.RC2
|    |    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    |    +--- io.micronaut:micronaut-core:1.1.0.RC2 (*)
|    |    |    \--- io.netty:netty-buffer:4.1.30.Final
|    |    |         \--- io.netty:netty-common:4.1.30.Final
|    |    +--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    |    +--- io.micronaut:micronaut-websocket:1.1.0.RC2
|    |    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    |    +--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    |    |    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    |    |    +--- io.micronaut:micronaut-aop:1.1.0.RC2 (*)
|    |    |    \--- io.reactivex.rxjava2:rxjava:2.2.6 (*)
|    |    +--- io.netty:netty-codec-http:4.1.30.Final
|    |    |    \--- io.netty:netty-codec:4.1.30.Final
|    |    |         \--- io.netty:netty-transport:4.1.30.Final
|    |    |              +--- io.netty:netty-buffer:4.1.30.Final (*)
|    |    |              \--- io.netty:netty-resolver:4.1.30.Final
|    |    |                   \--- io.netty:netty-common:4.1.30.Final
|    |    +--- io.reactivex.rxjava2:rxjava:2.2.6 (*)
|    |    \--- io.netty:netty-handler:4.1.30.Final
|    |         +--- io.netty:netty-buffer:4.1.30.Final (*)
|    |         +--- io.netty:netty-transport:4.1.30.Final (*)
|    |         \--- io.netty:netty-codec:4.1.30.Final (*)
|    +--- io.micronaut:micronaut-runtime:1.1.0.RC2 (*)
|    +--- io.netty:netty-handler-proxy:4.1.30.Final
|    |    +--- io.netty:netty-transport:4.1.30.Final (*)
|    |    +--- io.netty:netty-codec-socks:4.1.30.Final
|    |    |    \--- io.netty:netty-codec:4.1.30.Final (*)
|    |    \--- io.netty:netty-codec-http:4.1.30.Final (*)
|    \--- io.micronaut:micronaut-websocket:1.1.0.RC2 (*)
+--- io.micronaut:micronaut-http-server-netty -> 1.1.0.RC2
|    +--- org.slf4j:slf4j-api:1.7.25
|    +--- io.micronaut:micronaut-http-server:1.1.0.RC2
|    |    +--- io.micronaut:micronaut-runtime:1.1.0.RC2 (*)
|    |    +--- io.micronaut:micronaut-router:1.1.0.RC2
|    |    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    |    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    |    |    \--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    |    \--- io.micronaut:micronaut-websocket:1.1.0.RC2 (*)
|    \--- io.micronaut:micronaut-http-netty:1.1.0.RC2 (*)
\--- ch.qos.logback:logback-classic:1.2.3
     +--- ch.qos.logback:logback-core:1.2.3
     \--- org.slf4j:slf4j-api:1.7.25

implementation - Implementation only dependencies for source set 'main'. (n)
+--- io.micronaut:micronaut-bom:1.1.0.RC2 (n)
+--- io.swagger.core.v3:swagger-annotations:2.0.4 (n)
+--- io.micronaut:micronaut-inject (n)
+--- io.micronaut:micronaut-validation (n)
+--- io.micronaut:micronaut-runtime (n)
+--- io.micronaut:micronaut-http-client (n)
\--- io.micronaut:micronaut-http-server-netty (n)

runtime - Runtime dependencies for source set 'main' (deprecated, use 'runtimeOnly' instead).
No dependencies

runtimeClasspath - Runtime classpath of source set 'main'.
+--- io.micronaut:micronaut-bom:1.1.0.RC2
|    +--- io.micronaut:micronaut-http-client:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-http-server-netty:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-runtime:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-validation:1.1.0.RC2 (c)
|    +--- io.swagger.core.v3:swagger-annotations:2.0.4 (c)
|    +--- org.slf4j:slf4j-api:1.7.25 (c)
|    +--- io.micronaut:micronaut-http-netty:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-websocket:1.1.0.RC2 (c)
|    +--- io.netty:netty-handler-proxy:4.1.30.Final (c)
|    +--- io.reactivex.rxjava2:rxjava:2.2.6 (c)
|    +--- io.micronaut:micronaut-http-server:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-core:1.1.0.RC2 (c)
|    +--- javax.annotation:javax.annotation-api:1.3.2 (c)
|    +--- org.yaml:snakeyaml:1.23 (c)
|    +--- io.micronaut:micronaut-aop:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-http:1.1.0.RC2 (c)
|    +--- com.fasterxml.jackson.core:jackson-databind:2.9.8 (c)
|    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8 (c)
|    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8 (c)
|    +--- javax.cache:cache-api:1.1.0 (c)
|    +--- javax.validation:validation-api:2.0.1.Final (c)
|    +--- org.reactivestreams:reactive-streams:1.0.2 (c)
|    +--- io.micronaut:micronaut-buffer-netty:1.1.0.RC2 (c)
|    +--- io.netty:netty-codec-http:4.1.30.Final (c)
|    +--- io.netty:netty-handler:4.1.30.Final (c)
|    +--- io.netty:netty-codec-socks:4.1.30.Final (c)
|    +--- io.netty:netty-transport:4.1.30.Final (c)
|    +--- io.micronaut:micronaut-router:1.1.0.RC2 (c)
|    +--- com.google.code.findbugs:jsr305:3.0.2 (c)
|    +--- com.fasterxml.jackson.core:jackson-core:2.9.8 (c)
|    +--- com.fasterxml.jackson.core:jackson-annotations:2.9.8 (c)
|    +--- io.netty:netty-buffer:4.1.30.Final (c)
|    +--- io.netty:netty-codec:4.1.30.Final (c)
|    +--- io.netty:netty-resolver:4.1.30.Final (c)
|    \--- io.netty:netty-common:4.1.30.Final (c)
+--- io.swagger.core.v3:swagger-annotations:2.0.4
+--- io.micronaut:micronaut-inject -> 1.1.0.RC2
|    +--- javax.inject:javax.inject:1
|    +--- io.micronaut:micronaut-core:1.1.0.RC2
|    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    +--- org.reactivestreams:reactive-streams:1.0.2
|    |    \--- com.google.code.findbugs:jsr305:3.0.2
|    +--- org.yaml:snakeyaml:1.23
|    \--- javax.annotation:javax.annotation-api:1.3.2
+--- io.micronaut:micronaut-validation -> 1.1.0.RC2
|    +--- org.slf4j:slf4j-api:1.7.25
|    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    +--- io.micronaut:micronaut-http:1.1.0.RC2
|    |    \--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    \--- javax.validation:validation-api:2.0.1.Final
+--- io.micronaut:micronaut-runtime -> 1.1.0.RC2
|    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    +--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    +--- io.micronaut:micronaut-aop:1.1.0.RC2
|    |    \--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    +--- javax.validation:validation-api:2.0.1.Final
|    +--- javax.cache:cache-api:1.1.0
|    +--- com.fasterxml.jackson.core:jackson-databind:2.9.8
|    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -> 2.9.8
|    |    \--- com.fasterxml.jackson.core:jackson-core:2.9.8
|    +--- io.reactivex.rxjava2:rxjava:2.2.6
|    |    \--- org.reactivestreams:reactive-streams:1.0.2
|    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8
|    |    +--- com.fasterxml.jackson.core:jackson-core:2.9.8
|    |    \--- com.fasterxml.jackson.core:jackson-databind:2.9.8 (*)
|    \--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8
|         +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -> 2.9.8
|         +--- com.fasterxml.jackson.core:jackson-core:2.9.8
|         \--- com.fasterxml.jackson.core:jackson-databind:2.9.8 (*)
+--- io.micronaut:micronaut-http-client -> 1.1.0.RC2
|    +--- org.slf4j:slf4j-api:1.7.25
|    +--- io.reactivex.rxjava2:rxjava:2.2.6 (*)
|    +--- io.micronaut:micronaut-http-netty:1.1.0.RC2
|    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    +--- io.micronaut:micronaut-buffer-netty:1.1.0.RC2
|    |    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    |    +--- io.micronaut:micronaut-core:1.1.0.RC2 (*)
|    |    |    \--- io.netty:netty-buffer:4.1.30.Final
|    |    |         \--- io.netty:netty-common:4.1.30.Final
|    |    +--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    |    +--- io.micronaut:micronaut-websocket:1.1.0.RC2
|    |    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    |    +--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    |    |    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    |    |    +--- io.micronaut:micronaut-aop:1.1.0.RC2 (*)
|    |    |    \--- io.reactivex.rxjava2:rxjava:2.2.6 (*)
|    |    +--- io.netty:netty-codec-http:4.1.30.Final
|    |    |    \--- io.netty:netty-codec:4.1.30.Final
|    |    |         \--- io.netty:netty-transport:4.1.30.Final
|    |    |              +--- io.netty:netty-buffer:4.1.30.Final (*)
|    |    |              \--- io.netty:netty-resolver:4.1.30.Final
|    |    |                   \--- io.netty:netty-common:4.1.30.Final
|    |    +--- io.reactivex.rxjava2:rxjava:2.2.6 (*)
|    |    \--- io.netty:netty-handler:4.1.30.Final
|    |         +--- io.netty:netty-buffer:4.1.30.Final (*)
|    |         +--- io.netty:netty-transport:4.1.30.Final (*)
|    |         \--- io.netty:netty-codec:4.1.30.Final (*)
|    +--- io.micronaut:micronaut-runtime:1.1.0.RC2 (*)
|    +--- io.netty:netty-handler-proxy:4.1.30.Final
|    |    +--- io.netty:netty-transport:4.1.30.Final (*)
|    |    +--- io.netty:netty-codec-socks:4.1.30.Final
|    |    |    \--- io.netty:netty-codec:4.1.30.Final (*)
|    |    \--- io.netty:netty-codec-http:4.1.30.Final (*)
|    \--- io.micronaut:micronaut-websocket:1.1.0.RC2 (*)
+--- io.micronaut:micronaut-http-server-netty -> 1.1.0.RC2
|    +--- org.slf4j:slf4j-api:1.7.25
|    +--- io.micronaut:micronaut-http-server:1.1.0.RC2
|    |    +--- io.micronaut:micronaut-runtime:1.1.0.RC2 (*)
|    |    +--- io.micronaut:micronaut-router:1.1.0.RC2
|    |    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    |    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    |    |    \--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    |    \--- io.micronaut:micronaut-websocket:1.1.0.RC2 (*)
|    \--- io.micronaut:micronaut-http-netty:1.1.0.RC2 (*)
\--- ch.qos.logback:logback-classic:1.2.3
     +--- ch.qos.logback:logback-core:1.2.3
     \--- org.slf4j:slf4j-api:1.7.25

runtimeElements - Elements of runtime for main. (n)
No dependencies

runtimeOnly - Runtime only dependencies for source set 'main'. (n)
\--- ch.qos.logback:logback-classic:1.2.3 (n)

shadow
No dependencies

testAnnotationProcessor - Annotation processors and their dependencies for source set 'test'.
\--- io.micronaut:micronaut-inject-java:1.1.0.RC2
     \--- io.micronaut:micronaut-inject:1.1.0.RC2
          +--- javax.inject:javax.inject:1
          +--- io.micronaut:micronaut-core:1.1.0.RC2
          |    +--- org.slf4j:slf4j-api:1.7.25
          |    +--- org.reactivestreams:reactive-streams:1.0.2
          |    \--- com.google.code.findbugs:jsr305:3.0.2
          +--- org.yaml:snakeyaml:1.23
          \--- javax.annotation:javax.annotation-api:1.3.2

testCompile - Dependencies for source set 'test' (deprecated, use 'testImplementation' instead).
No dependencies

testCompileClasspath - Compile classpath for source set 'test'.
+--- io.micronaut:micronaut-bom:1.1.0.RC2
|    +--- io.micronaut:micronaut-http-client:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-http-server-netty:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-runtime:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-validation:1.1.0.RC2 (c)
|    +--- io.micronaut.test:micronaut-test-junit5:1.0.2 (c)
|    +--- org.junit.jupiter:junit-jupiter-engine:5.3.1 (c)
|    +--- io.swagger.core.v3:swagger-annotations:2.0.4 (c)
|    +--- io.micronaut.test:micronaut-test-core:1.0.2 (c)
|    +--- io.micronaut:micronaut-http-netty:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-websocket:1.1.0.RC2 (c)
|    +--- io.netty:netty-handler-proxy:4.1.30.Final (c)
|    +--- org.slf4j:slf4j-api:1.7.25 (c)
|    +--- io.reactivex.rxjava2:rxjava:2.2.6 (c)
|    +--- io.micronaut:micronaut-http-server:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-core:1.1.0.RC2 (c)
|    +--- javax.annotation:javax.annotation-api:1.3.2 (c)
|    +--- org.yaml:snakeyaml:1.23 (c)
|    +--- io.micronaut:micronaut-aop:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-http:1.1.0.RC2 (c)
|    +--- com.fasterxml.jackson.core:jackson-databind:2.9.8 (c)
|    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8 (c)
|    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8 (c)
|    +--- javax.cache:cache-api:1.1.0 (c)
|    +--- javax.validation:validation-api:2.0.1.Final (c)
|    +--- org.junit.jupiter:junit-jupiter-api:5.3.1 (c)
|    +--- org.reactivestreams:reactive-streams:1.0.2 (c)
|    +--- io.micronaut:micronaut-buffer-netty:1.1.0.RC2 (c)
|    +--- io.netty:netty-codec-http:4.1.30.Final (c)
|    +--- io.netty:netty-handler:4.1.30.Final (c)
|    +--- io.netty:netty-codec-socks:4.1.30.Final (c)
|    +--- io.netty:netty-transport:4.1.30.Final (c)
|    +--- io.micronaut:micronaut-router:1.1.0.RC2 (c)
|    +--- com.google.code.findbugs:jsr305:3.0.2 (c)
|    +--- com.fasterxml.jackson.core:jackson-core:2.9.8 (c)
|    +--- com.fasterxml.jackson.core:jackson-annotations:2.9.8 (c)
|    +--- io.netty:netty-buffer:4.1.30.Final (c)
|    +--- io.netty:netty-codec:4.1.30.Final (c)
|    +--- io.netty:netty-resolver:4.1.30.Final (c)
|    \--- io.netty:netty-common:4.1.30.Final (c)
+--- io.swagger.core.v3:swagger-annotations:2.0.4
+--- io.micronaut:micronaut-inject -> 1.1.0.RC2
|    +--- javax.inject:javax.inject:1
|    +--- io.micronaut:micronaut-core:1.1.0.RC2
|    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    +--- org.reactivestreams:reactive-streams:1.0.2
|    |    \--- com.google.code.findbugs:jsr305:3.0.2
|    +--- org.yaml:snakeyaml:1.23
|    \--- javax.annotation:javax.annotation-api:1.3.2
+--- io.micronaut:micronaut-validation -> 1.1.0.RC2
|    +--- org.slf4j:slf4j-api:1.7.25
|    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    +--- io.micronaut:micronaut-http:1.1.0.RC2
|    |    \--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    \--- javax.validation:validation-api:2.0.1.Final
+--- io.micronaut:micronaut-runtime -> 1.1.0.RC2
|    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    +--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    +--- io.micronaut:micronaut-aop:1.1.0.RC2
|    |    \--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    +--- javax.validation:validation-api:2.0.1.Final
|    +--- javax.cache:cache-api:1.1.0
|    +--- com.fasterxml.jackson.core:jackson-databind:2.9.8
|    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -> 2.9.8
|    |    \--- com.fasterxml.jackson.core:jackson-core:2.9.8
|    +--- io.reactivex.rxjava2:rxjava:2.2.6
|    |    \--- org.reactivestreams:reactive-streams:1.0.2
|    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8
|    |    +--- com.fasterxml.jackson.core:jackson-core:2.9.8
|    |    \--- com.fasterxml.jackson.core:jackson-databind:2.9.8 (*)
|    \--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8
|         +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -> 2.9.8
|         +--- com.fasterxml.jackson.core:jackson-core:2.9.8
|         \--- com.fasterxml.jackson.core:jackson-databind:2.9.8 (*)
+--- io.micronaut:micronaut-http-client -> 1.1.0.RC2
|    +--- org.slf4j:slf4j-api:1.7.25
|    +--- io.reactivex.rxjava2:rxjava:2.2.6 (*)
|    +--- io.micronaut:micronaut-http-netty:1.1.0.RC2
|    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    +--- io.micronaut:micronaut-buffer-netty:1.1.0.RC2
|    |    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    |    +--- io.micronaut:micronaut-core:1.1.0.RC2 (*)
|    |    |    \--- io.netty:netty-buffer:4.1.30.Final
|    |    |         \--- io.netty:netty-common:4.1.30.Final
|    |    +--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    |    +--- io.micronaut:micronaut-websocket:1.1.0.RC2
|    |    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    |    +--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    |    |    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    |    |    +--- io.micronaut:micronaut-aop:1.1.0.RC2 (*)
|    |    |    \--- io.reactivex.rxjava2:rxjava:2.2.6 (*)
|    |    +--- io.netty:netty-codec-http:4.1.30.Final
|    |    |    \--- io.netty:netty-codec:4.1.30.Final
|    |    |         \--- io.netty:netty-transport:4.1.30.Final
|    |    |              +--- io.netty:netty-buffer:4.1.30.Final (*)
|    |    |              \--- io.netty:netty-resolver:4.1.30.Final
|    |    |                   \--- io.netty:netty-common:4.1.30.Final
|    |    +--- io.reactivex.rxjava2:rxjava:2.2.6 (*)
|    |    \--- io.netty:netty-handler:4.1.30.Final
|    |         +--- io.netty:netty-buffer:4.1.30.Final (*)
|    |         +--- io.netty:netty-transport:4.1.30.Final (*)
|    |         \--- io.netty:netty-codec:4.1.30.Final (*)
|    +--- io.micronaut:micronaut-runtime:1.1.0.RC2 (*)
|    +--- io.netty:netty-handler-proxy:4.1.30.Final
|    |    +--- io.netty:netty-transport:4.1.30.Final (*)
|    |    +--- io.netty:netty-codec-socks:4.1.30.Final
|    |    |    \--- io.netty:netty-codec:4.1.30.Final (*)
|    |    \--- io.netty:netty-codec-http:4.1.30.Final (*)
|    \--- io.micronaut:micronaut-websocket:1.1.0.RC2 (*)
+--- io.micronaut:micronaut-http-server-netty -> 1.1.0.RC2
|    +--- org.slf4j:slf4j-api:1.7.25
|    +--- io.micronaut:micronaut-http-server:1.1.0.RC2
|    |    +--- io.micronaut:micronaut-runtime:1.1.0.RC2 (*)
|    |    +--- io.micronaut:micronaut-router:1.1.0.RC2
|    |    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    |    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    |    |    \--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    |    \--- io.micronaut:micronaut-websocket:1.1.0.RC2 (*)
|    \--- io.micronaut:micronaut-http-netty:1.1.0.RC2 (*)
+--- io.micronaut.test:micronaut-test-junit5:1.0.2
|    \--- io.micronaut.test:micronaut-test-core:1.0.2
+--- org.mockito:mockito-junit-jupiter:2.22.0
|    \--- org.mockito:mockito-core:2.22.0
|         +--- net.bytebuddy:byte-buddy:1.8.21
|         +--- net.bytebuddy:byte-buddy-agent:1.8.21
|         \--- org.objenesis:objenesis:2.6
\--- org.junit.jupiter:junit-jupiter-engine:5.3.0 -> 5.3.1
     +--- org.apiguardian:apiguardian-api:1.0.0
     +--- org.junit.platform:junit-platform-engine:1.3.1
     |    +--- org.apiguardian:apiguardian-api:1.0.0
     |    +--- org.junit.platform:junit-platform-commons:1.3.1
     |    |    \--- org.apiguardian:apiguardian-api:1.0.0
     |    \--- org.opentest4j:opentest4j:1.1.1
     \--- org.junit.jupiter:junit-jupiter-api:5.3.1
          +--- org.apiguardian:apiguardian-api:1.0.0
          +--- org.opentest4j:opentest4j:1.1.1
          \--- org.junit.platform:junit-platform-commons:1.3.1 (*)

testCompileOnly - Compile only dependencies for source set 'test'.
No dependencies

testImplementation - Implementation only dependencies for source set 'test'. (n)
+--- io.micronaut.test:micronaut-test-junit5:1.0.2 (n)
+--- org.mockito:mockito-junit-jupiter:2.22.0 (n)
\--- org.junit.jupiter:junit-jupiter-engine:5.3.0 (n)

testRuntime - Runtime dependencies for source set 'test' (deprecated, use 'testRuntimeOnly' instead).
No dependencies

testRuntimeClasspath - Runtime classpath of source set 'test'.
+--- io.micronaut:micronaut-bom:1.1.0.RC2
|    +--- io.micronaut:micronaut-http-client:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-http-server-netty:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-runtime:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-validation:1.1.0.RC2 (c)
|    +--- io.micronaut.test:micronaut-test-junit5:1.0.2 (c)
|    +--- org.junit.jupiter:junit-jupiter-engine:5.3.1 (c)
|    +--- io.swagger.core.v3:swagger-annotations:2.0.4 (c)
|    +--- org.slf4j:slf4j-api:1.7.25 (c)
|    +--- io.micronaut.test:micronaut-test-core:1.0.2 (c)
|    +--- org.junit.jupiter:junit-jupiter-api:5.3.1 (c)
|    +--- io.micronaut:micronaut-http-netty:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-websocket:1.1.0.RC2 (c)
|    +--- io.netty:netty-handler-proxy:4.1.30.Final (c)
|    +--- io.reactivex.rxjava2:rxjava:2.2.6 (c)
|    +--- io.micronaut:micronaut-http-server:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-core:1.1.0.RC2 (c)
|    +--- javax.annotation:javax.annotation-api:1.3.2 (c)
|    +--- org.yaml:snakeyaml:1.23 (c)
|    +--- io.micronaut:micronaut-aop:1.1.0.RC2 (c)
|    +--- io.micronaut:micronaut-http:1.1.0.RC2 (c)
|    +--- com.fasterxml.jackson.core:jackson-databind:2.9.8 (c)
|    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8 (c)
|    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8 (c)
|    +--- javax.cache:cache-api:1.1.0 (c)
|    +--- javax.validation:validation-api:2.0.1.Final (c)
|    +--- org.reactivestreams:reactive-streams:1.0.2 (c)
|    +--- io.micronaut:micronaut-buffer-netty:1.1.0.RC2 (c)
|    +--- io.netty:netty-codec-http:4.1.30.Final (c)
|    +--- io.netty:netty-handler:4.1.30.Final (c)
|    +--- io.netty:netty-codec-socks:4.1.30.Final (c)
|    +--- io.netty:netty-transport:4.1.30.Final (c)
|    +--- io.micronaut:micronaut-router:1.1.0.RC2 (c)
|    +--- com.google.code.findbugs:jsr305:3.0.2 (c)
|    +--- com.fasterxml.jackson.core:jackson-core:2.9.8 (c)
|    +--- com.fasterxml.jackson.core:jackson-annotations:2.9.8 (c)
|    +--- io.netty:netty-buffer:4.1.30.Final (c)
|    +--- io.netty:netty-codec:4.1.30.Final (c)
|    +--- io.netty:netty-resolver:4.1.30.Final (c)
|    \--- io.netty:netty-common:4.1.30.Final (c)
+--- io.swagger.core.v3:swagger-annotations:2.0.4
+--- io.micronaut:micronaut-inject -> 1.1.0.RC2
|    +--- javax.inject:javax.inject:1
|    +--- io.micronaut:micronaut-core:1.1.0.RC2
|    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    +--- org.reactivestreams:reactive-streams:1.0.2
|    |    \--- com.google.code.findbugs:jsr305:3.0.2
|    +--- org.yaml:snakeyaml:1.23
|    \--- javax.annotation:javax.annotation-api:1.3.2
+--- io.micronaut:micronaut-validation -> 1.1.0.RC2
|    +--- org.slf4j:slf4j-api:1.7.25
|    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    +--- io.micronaut:micronaut-http:1.1.0.RC2
|    |    \--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    \--- javax.validation:validation-api:2.0.1.Final
+--- io.micronaut:micronaut-runtime -> 1.1.0.RC2
|    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    +--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    +--- io.micronaut:micronaut-aop:1.1.0.RC2
|    |    \--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    +--- javax.validation:validation-api:2.0.1.Final
|    +--- javax.cache:cache-api:1.1.0
|    +--- com.fasterxml.jackson.core:jackson-databind:2.9.8
|    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -> 2.9.8
|    |    \--- com.fasterxml.jackson.core:jackson-core:2.9.8
|    +--- io.reactivex.rxjava2:rxjava:2.2.6
|    |    \--- org.reactivestreams:reactive-streams:1.0.2
|    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8
|    |    +--- com.fasterxml.jackson.core:jackson-core:2.9.8
|    |    \--- com.fasterxml.jackson.core:jackson-databind:2.9.8 (*)
|    \--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8
|         +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -> 2.9.8
|         +--- com.fasterxml.jackson.core:jackson-core:2.9.8
|         \--- com.fasterxml.jackson.core:jackson-databind:2.9.8 (*)
+--- io.micronaut:micronaut-http-client -> 1.1.0.RC2
|    +--- org.slf4j:slf4j-api:1.7.25
|    +--- io.reactivex.rxjava2:rxjava:2.2.6 (*)
|    +--- io.micronaut:micronaut-http-netty:1.1.0.RC2
|    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    +--- io.micronaut:micronaut-buffer-netty:1.1.0.RC2
|    |    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    |    +--- io.micronaut:micronaut-core:1.1.0.RC2 (*)
|    |    |    \--- io.netty:netty-buffer:4.1.30.Final
|    |    |         \--- io.netty:netty-common:4.1.30.Final
|    |    +--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    |    +--- io.micronaut:micronaut-websocket:1.1.0.RC2
|    |    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    |    +--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    |    |    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    |    |    +--- io.micronaut:micronaut-aop:1.1.0.RC2 (*)
|    |    |    \--- io.reactivex.rxjava2:rxjava:2.2.6 (*)
|    |    +--- io.netty:netty-codec-http:4.1.30.Final
|    |    |    \--- io.netty:netty-codec:4.1.30.Final
|    |    |         \--- io.netty:netty-transport:4.1.30.Final
|    |    |              +--- io.netty:netty-buffer:4.1.30.Final (*)
|    |    |              \--- io.netty:netty-resolver:4.1.30.Final
|    |    |                   \--- io.netty:netty-common:4.1.30.Final
|    |    +--- io.reactivex.rxjava2:rxjava:2.2.6 (*)
|    |    \--- io.netty:netty-handler:4.1.30.Final
|    |         +--- io.netty:netty-buffer:4.1.30.Final (*)
|    |         +--- io.netty:netty-transport:4.1.30.Final (*)
|    |         \--- io.netty:netty-codec:4.1.30.Final (*)
|    +--- io.micronaut:micronaut-runtime:1.1.0.RC2 (*)
|    +--- io.netty:netty-handler-proxy:4.1.30.Final
|    |    +--- io.netty:netty-transport:4.1.30.Final (*)
|    |    +--- io.netty:netty-codec-socks:4.1.30.Final
|    |    |    \--- io.netty:netty-codec:4.1.30.Final (*)
|    |    \--- io.netty:netty-codec-http:4.1.30.Final (*)
|    \--- io.micronaut:micronaut-websocket:1.1.0.RC2 (*)
+--- io.micronaut:micronaut-http-server-netty -> 1.1.0.RC2
|    +--- org.slf4j:slf4j-api:1.7.25
|    +--- io.micronaut:micronaut-http-server:1.1.0.RC2
|    |    +--- io.micronaut:micronaut-runtime:1.1.0.RC2 (*)
|    |    +--- io.micronaut:micronaut-router:1.1.0.RC2
|    |    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    |    +--- io.micronaut:micronaut-inject:1.1.0.RC2 (*)
|    |    |    \--- io.micronaut:micronaut-http:1.1.0.RC2 (*)
|    |    \--- io.micronaut:micronaut-websocket:1.1.0.RC2 (*)
|    \--- io.micronaut:micronaut-http-netty:1.1.0.RC2 (*)
+--- ch.qos.logback:logback-classic:1.2.3
|    +--- ch.qos.logback:logback-core:1.2.3
|    \--- org.slf4j:slf4j-api:1.7.25
+--- io.micronaut.test:micronaut-test-junit5:1.0.2
|    +--- io.micronaut.test:micronaut-test-core:1.0.2
|    |    +--- io.micronaut:micronaut-inject:1.0.3 -> 1.1.0.RC2 (*)
|    |    \--- io.micronaut:micronaut-runtime:1.0.3 -> 1.1.0.RC2 (*)
|    +--- io.micronaut:micronaut-inject:1.0.3 -> 1.1.0.RC2 (*)
|    +--- io.micronaut:micronaut-runtime:1.0.3 -> 1.1.0.RC2 (*)
|    \--- org.junit.jupiter:junit-jupiter-api:5.3.2 -> 5.3.1
|         +--- org.apiguardian:apiguardian-api:1.0.0
|         +--- org.opentest4j:opentest4j:1.1.1
|         \--- org.junit.platform:junit-platform-commons:1.3.1
|              \--- org.apiguardian:apiguardian-api:1.0.0
+--- org.mockito:mockito-junit-jupiter:2.22.0
|    +--- org.mockito:mockito-core:2.22.0
|    |    +--- net.bytebuddy:byte-buddy:1.8.21
|    |    +--- net.bytebuddy:byte-buddy-agent:1.8.21
|    |    \--- org.objenesis:objenesis:2.6
|    \--- org.junit.jupiter:junit-jupiter-api:5.1.1 -> 5.3.1 (*)
\--- org.junit.jupiter:junit-jupiter-engine:5.3.0 -> 5.3.1
     +--- org.apiguardian:apiguardian-api:1.0.0
     +--- org.junit.platform:junit-platform-engine:1.3.1
     |    +--- org.apiguardian:apiguardian-api:1.0.0
     |    +--- org.junit.platform:junit-platform-commons:1.3.1 (*)
     |    \--- org.opentest4j:opentest4j:1.1.1
     \--- org.junit.jupiter:junit-jupiter-api:5.3.1 (*)

testRuntimeOnly - Runtime only dependencies for source set 'test'. (n)
No dependencies

Which results in the correct dependencies placed in the expected places except for micronaut-inject-java in the compileOnly configuration

\--- io.micronaut:micronaut-inject-java FAILED

@melix I suspect it's because of the same reason that annotationProcessor failed. It seems one must use explicit version when the requested configuration is not in "compile, runtime, test, implementation, api". If so then we may need to update our docs if this fact is not already mentioned.

Removing the Maven files (pom.xml, .mvn, mvnw*), and re-importing the project, also delegating build to Gradle results in the following

mv-ij2

However the application runs without errors. @graemerocher micronaut-validation is explicitly requested forcompile in the build, thus why it's not marked as Provided scope.

@melix we have to get IntelliJ developers involved as Gradle is behaving as expected but the IDE is not. Must check with Eclipse and VS.Code.

aalmiray commented 5 years ago

Updating the build file with

 compileOnly "io.micronaut:micronaut-inject-java:$micronautVersion"

Does result in the correct dependency resolution

gw dependencies --configuration=compileOnly

> Task :dependencies

------------------------------------------------------------
Root project
------------------------------------------------------------

compileOnly - Compile only dependencies for source set 'main'.
\--- io.micronaut:micronaut-inject-java:1.1.0.RC2
     \--- io.micronaut:micronaut-inject:1.1.0.RC2
          +--- javax.inject:javax.inject:1
          +--- io.micronaut:micronaut-core:1.1.0.RC2
          |    +--- org.slf4j:slf4j-api:1.7.25
          |    +--- org.reactivestreams:reactive-streams:1.0.2
          |    \--- com.google.code.findbugs:jsr305:3.0.2
          +--- org.yaml:snakeyaml:1.23
          \--- javax.annotation:javax.annotation-api:1.3.2

A web-based, searchable dependency report is available by adding the --scan option.
graemerocher commented 5 years ago

So not being able to apply dependency management to the annotationProcessor scope is a problem for Micronaut, currently the Spring dependency management plugin allows this.

Also whilst using compileOnly works it will result in deprecation warnings I believe because annotation processors have to be in annotationProcessor scope.

I think in general there are issues with Gradle 5.x and IDE support that need to be resolved before we can confidently update our build templates and remove the spring dependency management plugin

oehme commented 5 years ago

So not being able to apply dependency management to the annotationProcessor scope is a problem for Micronaut, currently the Spring dependency management plugin allows this.

Platforms work with any configuration. The reason it doesn't work in the example above is because you added the platform only to the compile configuration, which annotationProcessor does not inherit from. If you add the platform to annotationProcessor, it'll work just fine.

graemerocher commented 5 years ago

That is a good news, so now we should just need to figure out the IDE related problems

graemerocher commented 5 years ago

Any update on this? Should we create IDE related issue reports somewhere?

aalmiray commented 5 years ago

I would recommend to do so, yes. IntelliJ and Eclipse would be the starting points.

graemerocher commented 5 years ago

Issues created and linked above.

aalmiray commented 5 years ago

Beautiful! Thanks Graeme 😄

graemerocher commented 5 years ago

Both issues were closed without actually being resolved. Apparently this is dependent on

https://github.com/gradle/gradle/issues/2300

And an external IntelliJ issue https://youtrack.jetbrains.com/issue/IDEA-187868

So seemingly we are stuck on older versions of Gradle until these are resolved.

oehme commented 5 years ago

I don't understand what's making us "stuck on older versions" here, can you elaborate? I've reopened the issues, so we can also discuss there. I feel like we're mixing up annotation processor support and BOM support. BOM support works fine, as explained earlier in this thread. For annotation processing in the Eclipse, you'll still need net.ltgt.apt. That's hasn't changed in 5.0.

graemerocher commented 5 years ago

IDE support is important from a framework perspective. If IDE support is broken that is an issue in terms of upgrading. Currently Gradle + any IDE presents the issues described above. Issues that are not present when using Maven + any IDE.

If we still need net.ltgt.apt for Eclipse then ok, we have a way forward with Eclipse / Visual Studio, and if that is the current recommendation then ok.

With IntelliJ there are issues in 5.x that are not present with our previous setup. It would be good if those issues are resolved. Prior to us changing the templates.

oehme commented 5 years ago

I can reproduce the IDEA issue when using the "Module per SourceSet" checkbox (it works if you uncheck it). That is out of our control and needs to be fixed on the IDEA side. I've pinged the IntelliJ team.

graemerocher commented 5 years ago

Thanks @oehme

oehme commented 5 years ago

Thanks for bearing with me :)

supsup commented 5 years ago

Any update @oehme ?

oehme commented 5 years ago

Please follow along at https://github.com/gradle/gradle/issues/9313. I'll update that one when the JetBrains team picks it up. So far I haven't heard back from them, so I asked again today.