typesafehub / conductr-lib

Other
8 stars 13 forks source link

WIP - DON'T MERGE: Provide dependencies #129

Closed markusjura closed 7 years ago

markusjura commented 7 years ago

Does not publish the following dependent dependencies anymore (all supported versions):

This is achieved by using the provided scope when adding the dependencies.

Addresses https://github.com/typesafehub/conductr-lib/issues/127

markusjura commented 7 years ago

@jroper @huntc This is the first try of solving https://github.com/typesafehub/conductr-lib/issues/127. Unfortunately, the PR is not fully fixing the issue, see the section Problem description. I am out of ideas how to actually fix the issue with the provided scope so I need your expertise here.

Also note the section Other Findings.

In case you want to reproduce it use current master of https://github.com/lagom/activator-lagom-java-chirper and change the sbt-conductr version to 2.2.4 so that chirper uses Lagom 1.2.2 and conductr-lib Lagom 1.3.0-RC1.

Problem description

I've tried the following combinations of declaring the provided scope:

Lagom only

When marking only the Lagom libraries and not the dependent Play and Akka libraries as provided:

// lagom1-java-conductr-bundle-lib
Library.lagom1ClientJavadsl % "provided"

.. then the Lagom service throws the following error in regards to Akka HTTP when starting it in ConductR:

2017-02-21T11:06:59Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fca01d4aefe7ae6688ae7f05c6953df7, sourceThread=conductr-agent-akka.actor.default-dispatcher-21, akkaTimestamp=11:06:59.832UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -  at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3957)
    at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4875)
    at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4875)
    at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4881)
    at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4881)
    at com.google.inject.internal.FailableCache.get(FailableCache.java:48)
    at com.google.inject.internal.FailableCache.get(FailableCache.java:48)
    at com.google.inject.internal.MembersInjectorStore.get(MembersInjectorStore.java:68)
    at com.google.inject.internal.MembersInjectorStore.get(MembersInjectorStore.java:68)
    at com.google.inject.internal.Initializer$InjectableReference.validate(Initializer.java:140)
    at com.google.inject.internal.Initializer$InjectableReference.validate(Initializer.java:140)
    at com.google.inject.internal.Initializer.validateOustandingInjections(Initializer.java:91)
    at com.google.inject.internal.Initializer.validateOustandingInjections(Initializer.java:91)
    at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:140)
    at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:140)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:107)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:107)
    at com.google.inject.Guice.createInjector(Guice.java:96)
    at com.google.inject.Guice.createInjector(Guice.java:96)
    at com.google.inject.Guice.createInjector(Guice.java:84)
    at com.google.inject.Guice.createInjector(Guice.java:84)
    at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:181)
    at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:181)
    at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:123)
    at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:123)
    at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
    at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
    at com.typesafe.conductr.bundlelib.lagom.javadsl.ConductRApplicationLoader.load(ConductRApplicationLoader.scala:22)
    at com.typesafe.conductr.bundlelib.lagom.javadsl.ConductRApplicationLoader.load(ConductRApplicationLoader.scala:22)
    at play.core.server.ProdServerStart$.start(ProdServerStart.scala:47)
    at play.core.server.ProdServerStart$.start(ProdServerStart.scala:47)
    at play.core.server.ProdServerStart$.main(ProdServerStart.scala:22)
    at play.core.server.ProdServerStart$.main(ProdServerStart.scala:22)
    at play.core.server.ProdServerStart.main(ProdServerStart.scala)
    at play.core.server.ProdServerStart.main(ProdServerStart.scala)
Caused by: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: Lorg/asynchttpclient/netty/channel/CleanupChannelGroup;
Caused by: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: Lorg/asynchttpclient/netty/channel/CleanupChannelGroup;
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2205)
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2205)
    at com.google.common.cache.LocalCache.get(LocalCache.java:3953)
    at com.google.common.cache.LocalCache.get(LocalCache.java:3953)
    at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3957)
    at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3957)
    at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4875)
    at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4875)
2017-02-21T11:06:59Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fca01d4aefe7ae6688ae7f05c6953df7, sourceThread=conductr-agent-akka.actor.default-dispatcher-21, akkaTimestamp=11:06:59.832UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -  at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4881)
    at com.google.inject.internal.FailableCache.get(FailableCache.java:48)
    at com.google.inject.internal.FailableCache.get(FailableCache.java:48)

Lagom + Akka - not Play

When marking only the Lagom, Akka HTTP and Akka Clustering libraries and not the dependent PlayWS library as provided:

// akka24-common
Library.akka24Http % "provided"
// akka24-conductr-bundle-lib
Library.akka24Http    % "provided",
Library.akka24Cluster % "provided",
// lagom1-java-conductr-bundle-lib
Library.lagom1ClientJavadsl % "provided"

.. then the Lagom service throws the following error in regards to play.api.libs.ws.WSClient when starting it in ConductR:

2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-35, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -
    at com.google.inject.spi.InjectionPoint.forConstructorOf(InjectionPoint.java:245)
    at com.google.inject.spi.InjectionPoint.forConstructorOf(InjectionPoint.java:245)

2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-2, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.internal.ConstructorBindingImpl.create(ConstructorBindingImpl.java:99)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-2, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.internal.ConstructorBindingImpl.create(ConstructorBindingImpl.java:99)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-2, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-2, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -

2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-30, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.internal.InjectorImpl.createUninitializedBinding(InjectorImpl.java:658)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-30, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.internal.InjectorImpl.createUninitializedBinding(InjectorImpl.java:658)
    at com.google.inject.internal.UntargettedBindingProcessor$1.visit(UntargettedBindingProcessor.java:51)
    at com.google.inject.internal.UntargettedBindingProcessor$1.visit(UntargettedBindingProcessor.java:51)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-17, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-17, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -
    at com.google.inject.internal.UntargettedBindingProcessor$1.visit(UntargettedBindingProcessor.java:35)
    at com.google.inject.internal.UntargettedBindingProcessor$1.visit(UntargettedBindingProcessor.java:35)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-17, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-17, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -

2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-17, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.internal.UntargettedBindingImpl.acceptTargetVisitor(UntargettedBindingImpl.java:41)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-17, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.internal.UntargettedBindingImpl.acceptTargetVisitor(UntargettedBindingImpl.java:41)

2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-17, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.internal.UntargettedBindingProcessor.visit(UntargettedBindingProcessor.java:35)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-17, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.internal.UntargettedBindingProcessor.visit(UntargettedBindingProcessor.java:35)

2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-35, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.internal.UntargettedBindingProcessor.visit(UntargettedBindingProcessor.java:27)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-35, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.internal.UntargettedBindingProcessor.visit(UntargettedBindingProcessor.java:27)

2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-2, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.internal.BindingImpl.acceptVisitor(BindingImpl.java:93)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-2, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.internal.BindingImpl.acceptVisitor(BindingImpl.java:93)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-34, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-34, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -

2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-2, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.internal.AbstractProcessor.process(AbstractProcessor.java:56)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-2, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.internal.AbstractProcessor.process(AbstractProcessor.java:56)

2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-30, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:187)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-30, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:187)

2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-32, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-32, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-32, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-32, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -

2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-32, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.Guice.createInjector(Guice.java:96)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-32, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.google.inject.Guice.createInjector(Guice.java:96)
    at com.google.inject.Guice.createInjector(Guice.java:84)
    at com.google.inject.Guice.createInjector(Guice.java:84)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-32, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-32, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -

2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-37, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:181)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-37, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:181)
    at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:123)
    at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:123)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-37, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-37, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -

2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-15, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-15, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)

2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-15, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.typesafe.conductr.bundlelib.play.api.ConductRApplicationLoader.load(ConductRApplicationLoader.scala:21)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-15, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at com.typesafe.conductr.bundlelib.play.api.ConductRApplicationLoader.load(ConductRApplicationLoader.scala:21)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-15, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-15, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -

2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-19, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at play.core.server.ProdServerStart$.start(ProdServerStart.scala:47)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-19, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at play.core.server.ProdServerStart$.start(ProdServerStart.scala:47)
    at play.core.server.ProdServerStart$.main(ProdServerStart.scala:22)
    at play.core.server.ProdServerStart$.main(ProdServerStart.scala:22)

2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-17, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at play.core.server.ProdServerStart.main(ProdServerStart.scala)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-17, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - at play.core.server.ProdServerStart.main(ProdServerStart.scala)
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-17, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-17, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] -

2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-24, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - Caused by: java.lang.ClassNotFoundException: play.api.libs.ws.WSClient
2017-02-21T15:06:19Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=fa20e5828d2aa0f7a715927faa1823ef-e3269a29ac688790e1410b06948f5a67, sourceThread=conductr-agent-akka.actor.default-dispatcher-24, akkaTimestamp=15:06:19.576UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - Caused by: java.lang.ClassNotFoundException: play.api.libs.ws.WSClient
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

Lagom + Akka + Play

When marking all dependent Lagom libraries in conductr-lib as provided:

// play25-conductr-lib-common
Library.play25Ws % "provided"
// play25-conductr-bundle-lib
  Library.play25Ws      % "provided",
// akka24-common
Library.akka24Http % "provided"
// akka24-conductr-bundle-lib
Library.akka24Http    % "provided",
Library.akka24Cluster % "provided",
// lagom1-java-conductr-bundle-lib
Library.lagom1ClientJavadsl % "provided"

.. then the Lagom service works! However, the Play service front-end of activator-lagom-java-chirper is throwing the following exception in regards to org/asynchttpclient/netty/channel/CleanupChannelGroup:

2017-02-21T15:23:11Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=ed34112a9333d23d3ecf022092ae6db5, sourceThread=conductr-agent-akka.actor.default-dispatcher-34, akkaTimestamp=15:23:11.513UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - Oops, cannot start the server.
2017-02-21T15:23:11Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=ed34112a9333d23d3ecf022092ae6db5, sourceThread=conductr-agent-akka.actor.default-dispatcher-34, akkaTimestamp=15:23:11.513UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - Oops, cannot start the server.

2017-02-21T15:23:11Z Markuss-MacBook-Pro.local WARN  Reaper [bundleId=ed34112a9333d23d3ecf022092ae6db5, sourceThread=conductr-agent-akka.actor.default-dispatcher-33, akkaTimestamp=15:23:11.513UTC, akkaSource=akka://conductr-agent/user/reaper, sourceActorSystem=conductr-agent] - com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: Lorg/asynchttpclient/netty/channel/CleanupChannelGroup;

Other Findings

The sbt project akka24-common adds Akka HTTP as a provided dependency:

libraryDependencies ++= List(
  Library.akka24Http % "provided"
)

`akka24-conductr-bundle-lib` depends on `akka24-common`. However, without declaring the same dependency `Library.akka24Http % "provided"` in the `akka24-conductr-bundle-lib` project, the following error message is thrown during compilation of `akka24-conductr-bundle-lib`:

// compile with scalac option -Ylog-classpath [info] Compiling 3 Scala sources to /Users/mj/workspace/conductr-lib/akka24-conductr-bundle-lib/target/scala-2.11/classes... Classpath built from (-target = jvm-1.8 -d = . -deprecation = true -language = languageFeatures.ValueSet(dynamics, postfixOps, reflectiveCalls, implicitConversions, higherKinds, existentials, experimental.macros) -bootclasspath = /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/classes:/Users/mj/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.11.8.jar -feature = true -encoding = UTF-8 -classpath = /Users/mj/workspace/conductr-lib/akka24-conductr-bundle-lib/target/scala-2.11/classes:/Users/mj/workspace/conductr-lib/scala-conductr-bundle-lib/target/scala-2.11/classes:/Users/mj/workspace/conductr-lib/conductr-bundle-lib/target/classes:/Users/mj/workspace/conductr-lib/common/target/classes:/Users/mj/workspace/conductr-lib/scala-common/target/scala-2.11/classes:/Users/mj/workspace/conductr-lib/akka24-common/target/scala-2.11/classes:/Users/mj/.ivy2/cache/com.typesafe.akka/akka-cluster_2.11/jars/akka-cluster_2.11-2.4.17.jar:/Users/mj/.ivy2/cache/com.typesafe.akka/akka-remote_2.11/jars/akka-remote_2.11-2.4.17.jar:/Users/mj/.ivy2/cache/com.typesafe.akka/akka-actor_2.11/jars/akka-actor_2.11-2.4.17.jar:/Users/mj/.ivy2/cache/com.typesafe/config/bundles/config-1.3.0.jar:/Users/mj/.ivy2/cache/org.scala-lang.modules/scala-java8-compat_2.11/bundles/scala-java8-compat_2.11-0.7.0.jar:/Users/mj/.ivy2/cache/com.typesafe.akka/akka-stream_2.11/jars/akka-stream_2.11-2.4.17.jar:/Users/mj/.ivy2/cache/org.reactivestreams/reactive-streams/jars/reactive-streams-1.0.0.jar:/Users/mj/.ivy2/cache/com.typesafe/ssl-config-core_2.11/bundles/ssl-config-core_2.11-0.2.1.jar:/Users/mj/.ivy2/cache/org.scala-lang.modules/scala-parser-combinators_2.11/bundles/scala-parser-combinators_2.11-1.0.4.jar:/Users/mj/.ivy2/cache/com.typesafe.akka/akka-protobuf_2.11/jars/akka-protobuf_2.11-2.4.17.jar:/Users/mj/.ivy2/cache/io.netty/netty/bundles/netty-3.10.6.Final.jar:/Users/mj/.ivy2/cache/org.uncommons.maths/uncommons-maths/jars/uncommons-maths-1.2.2a.jar:/Users/mj/.ivy2/cache/io.aeron/aeron-driver/jars/aeron-driver-1.1.0.jar:/Users/mj/.ivy2/cache/io.aeron/aeron-client/jars/aeron-client-1.1.0.jar:/Users/mj/.ivy2/cache/org.agrona/agrona/jars/agrona-0.9.2.jar -unchecked = true -Ylog-classpath = true) Defaults: object Defaults { scalaHome = javaBootClassPath = /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/resources.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/rt.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/sunrsasign.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jsse.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jce.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/charsets.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jfr.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/classes scalaLibDirFound = None scalaLibFound = scalaBootClassPath = scalaPluginPath = misc/scala-devel/plugins } Calculated: object Calculated { scalaHome = javaBootClassPath = /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/resources.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/rt.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/sunrsasign.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jsse.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jce.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/charsets.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jfr.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/classes javaExtDirs = /Users/mj/Library/Java/Extensions /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext /Library/Java/Extensions /Network/Library/Java/Extensions /System/Library/Java/Extensions /usr/lib/java javaUserClassPath = useJavaClassPath = false scalaBootClassPath = /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/resources.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/rt.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/sunrsasign.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jsse.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jce.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/charsets.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jfr.jar /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/classes /Users/mj/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.11.8.jar scalaExtDirs = userClassPath = /Users/mj/workspace/conductr-lib/akka24-conductr-bundle-lib/target/scala-2.11/classes /Users/mj/workspace/conductr-lib/scala-conductr-bundle-lib/target/scala-2.11/classes /Users/mj/workspace/conductr-lib/conductr-bundle-lib/target/classes /Users/mj/workspace/conductr-lib/common/target/classes /Users/mj/workspace/conductr-lib/scala-common/target/scala-2.11/classes /Users/mj/workspace/conductr-lib/akka24-common/target/scala-2.11/classes /Users/mj/.ivy2/cache/com.typesafe.akka/akka-cluster_2.11/jars/akka-cluster_2.11-2.4.17.jar /Users/mj/.ivy2/cache/com.typesafe.akka/akka-remote_2.11/jars/akka-remote_2.11-2.4.17.jar /Users/mj/.ivy2/cache/com.typesafe.akka/akka-actor_2.11/jars/akka-actor_2.11-2.4.17.jar /Users/mj/.ivy2/cache/com.typesafe/config/bundles/config-1.3.0.jar /Users/mj/.ivy2/cache/org.scala-lang.modules/scala-java8-compat_2.11/bundles/scala-java8-compat_2.11-0.7.0.jar /Users/mj/.ivy2/cache/com.typesafe.akka/akka-stream_2.11/jars/akka-stream_2.11-2.4.17.jar /Users/mj/.ivy2/cache/org.reactivestreams/reactive-streams/jars/reactive-streams-1.0.0.jar /Users/mj/.ivy2/cache/com.typesafe/ssl-config-core_2.11/bundles/ssl-config-core_2.11-0.2.1.jar /Users/mj/.ivy2/cache/org.scala-lang.modules/scala-parser-combinators_2.11/bundles/scala-parser-combinators_2.11-1.0.4.jar /Users/mj/.ivy2/cache/com.typesafe.akka/akka-protobuf_2.11/jars/akka-protobuf_2.11-2.4.17.jar /Users/mj/.ivy2/cache/io.netty/netty/bundles/netty-3.10.6.Final.jar /Users/mj/.ivy2/cache/org.uncommons.maths/uncommons-maths/jars/uncommons-maths-1.2.2a.jar /Users/mj/.ivy2/cache/io.aeron/aeron-driver/jars/aeron-driver-1.1.0.jar /Users/mj/.ivy2/cache/io.aeron/aeron-client/jars/aeron-client-1.1.0.jar /Users/mj/.ivy2/cache/org.agrona/agrona/jars/agrona-0.9.2.jar sourcePath = } After java boot/extdirs classpath has 28 entries: directory classpath: /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/resources.jar directory classpath: /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/rt.jar directory classpath: /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jsse.jar directory classpath: /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jce.jar directory classpath: /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/charsets.jar directory classpath: /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jfr.jar directory classpath: /Users/mj/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.11.8.jar directory classpath: /Users/mj/workspace/conductr-lib/akka24-conductr-bundle-lib/target/scala-2.11/classes directory classpath: /Users/mj/workspace/conductr-lib/scala-conductr-bundle-lib/target/scala-2.11/classes directory classpath: /Users/mj/workspace/conductr-lib/conductr-bundle-lib/target/classes directory classpath: /Users/mj/workspace/conductr-lib/common/target/classes directory classpath: /Users/mj/workspace/conductr-lib/scala-common/target/scala-2.11/classes directory classpath: /Users/mj/workspace/conductr-lib/akka24-common/target/scala-2.11/classes directory classpath: /Users/mj/.ivy2/cache/com.typesafe.akka/akka-cluster_2.11/jars/akka-cluster_2.11-2.4.17.jar directory classpath: /Users/mj/.ivy2/cache/com.typesafe.akka/akka-remote_2.11/jars/akka-remote_2.11-2.4.17.jar directory classpath: /Users/mj/.ivy2/cache/com.typesafe.akka/akka-actor_2.11/jars/akka-actor_2.11-2.4.17.jar directory classpath: /Users/mj/.ivy2/cache/com.typesafe/config/bundles/config-1.3.0.jar directory classpath: /Users/mj/.ivy2/cache/org.scala-lang.modules/scala-java8-compat_2.11/bundles/scala-java8-compat_2.11-0.7.0.jar directory classpath: /Users/mj/.ivy2/cache/com.typesafe.akka/akka-stream_2.11/jars/akka-stream_2.11-2.4.17.jar directory classpath: /Users/mj/.ivy2/cache/org.reactivestreams/reactive-streams/jars/reactive-streams-1.0.0.jar directory classpath: /Users/mj/.ivy2/cache/com.typesafe/ssl-config-core_2.11/bundles/ssl-config-core_2.11-0.2.1.jar directory classpath: /Users/mj/.ivy2/cache/org.scala-lang.modules/scala-parser-combinators_2.11/bundles/scala-parser-combinators_2.11-1.0.4.jar directory classpath: /Users/mj/.ivy2/cache/com.typesafe.akka/akka-protobuf_2.11/jars/akka-protobuf_2.11-2.4.17.jar directory classpath: /Users/mj/.ivy2/cache/io.netty/netty/bundles/netty-3.10.6.Final.jar directory classpath: /Users/mj/.ivy2/cache/org.uncommons.maths/uncommons-maths/jars/uncommons-maths-1.2.2a.jar directory classpath: /Users/mj/.ivy2/cache/io.aeron/aeron-driver/jars/aeron-driver-1.1.0.jar directory classpath: /Users/mj/.ivy2/cache/io.aeron/aeron-client/jars/aeron-client-1.1.0.jar directory classpath: /Users/mj/.ivy2/cache/org.agrona/agrona/jars/agrona-0.9.2.jar [info] [search path for source files: ] [info] [search path for class files: /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/System/Library/Java/Extensions/MRJToolkit.jar:/Users/mj/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.11.8.jar:/Users/mj/workspace/conductr-lib/akka24-conductr-bundle-lib/target/scala-2.11/classes:/Users/mj/workspace/conductr-lib/scala-conductr-bundle-lib/target/scala-2.11/classes:/Users/mj/workspace/conductr-lib/conductr-bundle-lib/target/classes:/Users/mj/workspace/conductr-lib/common/target/classes:/Users/mj/workspace/conductr-lib/scala-common/target/scala-2.11/classes:/Users/mj/workspace/conductr-lib/akka24-common/target/scala-2.11/classes:/Users/mj/.ivy2/cache/com.typesafe.akka/akka-cluster_2.11/jars/akka-cluster_2.11-2.4.17.jar:/Users/mj/.ivy2/cache/com.typesafe.akka/akka-remote_2.11/jars/akka-remote_2.11-2.4.17.jar:/Users/mj/.ivy2/cache/com.typesafe.akka/akka-actor_2.11/jars/akka-actor_2.11-2.4.17.jar:/Users/mj/.ivy2/cache/com.typesafe/config/bundles/config-1.3.0.jar:/Users/mj/.ivy2/cache/org.scala-lang.modules/scala-java8-compat_2.11/bundles/scala-java8-compat_2.11-0.7.0.jar:/Users/mj/.ivy2/cache/com.typesafe.akka/akka-stream_2.11/jars/akka-stream_2.11-2.4.17.jar:/Users/mj/.ivy2/cache/org.reactivestreams/reactive-streams/jars/reactive-streams-1.0.0.jar:/Users/mj/.ivy2/cache/com.typesafe/ssl-config-core_2.11/bundles/ssl-config-core_2.11-0.2.1.jar:/Users/mj/.ivy2/cache/org.scala-lang.modules/scala-parser-combinators_2.11/bundles/scala-parser-combinators_2.11-1.0.4.jar:/Users/mj/.ivy2/cache/com.typesafe.akka/akka-protobuf_2.11/jars/akka-protobuf_2.11-2.4.17.jar:/Users/mj/.ivy2/cache/io.netty/netty/bundles/netty-3.10.6.Final.jar:/Users/mj/.ivy2/cache/org.uncommons.maths/uncommons-maths/jars/uncommons-maths-1.2.2a.jar:/Users/mj/.ivy2/cache/io.aeron/aeron-driver/jars/aeron-driver-1.1.0.jar:/Users/mj/.ivy2/cache/io.aeron/aeron-client/jars/aeron-client-1.1.0.jar:/Users/mj/.ivy2/cache/org.agrona/agrona/jars/agrona-0.9.2.jar] [error] missing or invalid dependency detected while loading class file 'ConnectionHandler.class'. [error] Could not access term http in package akka, [error] because it (or its dependencies) are missing. Check your build definition for [error] missing or conflicting dependencies. (Re-run with -Ylog-classpath to see the problematic classpath.) [error] A full rebuild may help if 'ConnectionHandler.class' was compiled against an incompatible version of akka. [error] missing or invalid dependency detected while loading class file 'ConnectionHandler.class'. [error] Could not access term scaladsl in value akka.http, [error] because it (or its dependencies) are missing. Check your build definition for [error] missing or conflicting dependencies. (Re-run with -Ylog-classpath to see the problematic classpath.) [error] A full rebuild may help if 'ConnectionHandler.class' was compiled against an incompatible version of akka.http. [error] two errors found [error] (akka24ConductRBundleLib/compile:compileIncremental) Compilation failed [error] Total time: 0 s, completed Feb 21, 2017 5:20:19 PM



Note that adding the lib to the dependent project as well is not necessary for other sbt projects within conductr-lib, e.g. `akka24-conductr-client-lib`, `play25-conductr-bundle-lib`. It is only necessary for `akka23-conductr-bundle-lib` and `akka24-conductr-bundle-lib`:
markusjura commented 7 years ago

Even when we find a solution with provided, I am not sure if we should mark akka-cluster, akka-http and play-ws as provided. All of the libraries are needed in the different conductr-bundle-lib flavors. I feel that we cannot always assume that the application using conductr-lib has added these libraries as dependencies.

Note that this will not only affect Lagom services, but also Akka and Play apps.

@huntc @jroper WDYT?

jroper commented 7 years ago

Why does the Lagom conductr-lib library depend on Akka HTTP? Shouldn't it just use play-ws?

Another solution would be to build against the minimum Lagom version that you can, for Java that would be 1.0.0, for Scala, 1.3.0. Then, sbt will use semantic versioning to resolve the version that the user wants. Note however that won't work for Maven, but then Maven provides no sane predictability on version conflict resolution anyway.

markusjura commented 7 years ago

That would also mean that conductr-lib would also introduce versions that get evicted and therefore evicted warnings are displayed. Not ideal.

jroper commented 7 years ago

I don't know why sbt should warn on eviction of a binary compatible release, does it really do that?

We could potentially use version ranges - however in the past I've seen big problems caused by using version ranges in sbt.

The alternative is that you have to maintain an artifact for every single Lagom 1.x release - our cadence for these releases is 4 months at the moment, that's 3 artifacts a year, and you need one for Scala and one for Java, so 6 artifacts. Is that really an ideal option? What's the point in us putting all this effort into maintaining binary compatibility if it can't be utilised?

jroper commented 7 years ago

@eed3si9n Does sbt really not use semantic versioning when it does eviction warnings? We've committed to binary compatibility for all Lagom 1.x releases, so there should be no need to warn if 1.3.0 evicts 1.2.2.

markusjura commented 7 years ago

In regards to the sbt eviction warnings, I was getting my information from here: http://www.scala-sbt.org/0.13/docs/Library-Management.html#Eviction+warning

It states:

Furthermore, the binary version compatibility of the akka-actor 2.1.4 and 2.3.7 are not guaranteed since the second segment has bumped up.

So I assume that the eviction warnings are triggered whenever a library with a different major version is part of the classpath, e.g. 1.2.x and 1.3.x.

markusjura commented 7 years ago

@jroper When using Lagom 1.0.0 in lagom1-java-conductr-bundle-lib and when a Lagom project uses the version 1.2.2 then you can the following eviction warning in regards to Lagom:

> evicted
[warn] Here are some of the libraries that were evicted:
[warn]  * com.lightbend.lagom:lagom-javadsl-client_2.11:1.0.0 -> 1.2.2 (caller: com.typesafe.conductr:lagom1-java-conductr-bundle-lib_2.11:1.6.2-SNAPSHOT, com.lightbend.lagom:lagom-javadsl-server_2.11:1.2.2)
markusjura commented 7 years ago

@jroper @huntc After further discussions with @huntc and the conversations in here and at https://github.com/typesafehub/conductr-lib/issues/127 it is time to summarize the current findings and proposed solutions.

Note also the below Intermediate solution that I'll work on today to fix our issue until we've figured out a final solution (one of the Possible Solutions section).

Findings conductr-lib overwrites Lagom, Akka and Play version in case the version is newer than in the corresponding application itself. As a result, conductr-lib 1.6.0 and newer versions cannot be used with Lagom 1.2.2 and prior versions. This is because Lagom 1.2.x is not binary compatible with Lagom 1.3.x, see https://github.com/typesafehub/conductr-lib/issues/127.

Possible Solutions

  1. Changing Lagom 1.3.x so that it is also binary compatible in its internal APIs with previous minor versions
  2. Creating a new conductr-lib flavor for each Lagom minor version, e.g. 1.2.x, 1.3.x - both for Java and Scala. The Lagom cadence for these releases is 4 months at the moment
  3. conductr-lib should use the provided scope for every Lagom, Akka and Play libraries. This is problematic due to https://github.com/typesafehub/conductr-lib/pull/129#issuecomment-281409906. Also, it is not straightforward and certain problems can occur as described here https://github.com/typesafehub/conductr-lib/pull/129#issuecomment-281394221
  4. conductr-lib builds against the minimum Akka, Play and Lagom versions that are binray compatible, incl. internal APIs. For Lagom Java this is 1.0.0 and for Lagom Scala 1.3.0. This solutions created eviction warnings though, see https://github.com/typesafehub/conductr-lib/pull/129#issuecomment-281618959

Intermediate solution Until we have implemented one of the above solutions we will work on an intermediate solution so that updated sbt-conductr version works with all Lagom versions.

We will create two sbt-conductr versions for now:

We will also document the versions in the Lagom documentation accordingly.

jroper commented 7 years ago

Changing Lagom 1.3.x so that it is also binary compatible in its internal APIs with previous minor versions

That doesn't solve the problem - even if Lagom 1.3 were internally binary compatible with 1.2, that doesn't change the fact that if a user wants to use Lagom 1.2, they can't, because ConductR bundle lib is forcing them to upgrade (at least partially) to Lagom 1.3.

jroper commented 7 years ago

Given that Lagom 1.x is binary compatible (public APIs) there shouldn't be any reason why a user wouldn't want to upgrade from 1.2.x to 1.3.x, so maybe the solution is to simply force them to upgrade. And if they don't want to, well, then they can just use an older version of ConductR bundle lib.

eed3si9n commented 7 years ago

@jroper

Does sbt really not use semantic versioning when it does eviction warnings? We've committed to binary compatibility for all Lagom 1.x releases, so there should be no need to warn if 1.3.0 evicts 1.2.2.

When the version is cross published (ends with _2.12 etc) sbt by default assumes it's using "Second Segment variant". https://github.com/sbt/sbt/blob/v0.13.13/ivy/src/main/scala/sbt/EvictionWarning.scala#L56-L65

We can certainly improve the guessing if we can promise some rules for well known libraries.

dwijnand commented 7 years ago

https://github.com/sbt/sbt/blob/v0.13.13/ivy/src/main/scala/sbt/VersionNumber.scala#L121-L125

huntc commented 7 years ago

Closing this one out. #151 solidifies the strategy that we'll keep Lagom 1.3.x as our base, allowing the user to override as necessary.