Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP - DON'T MERGE: Provide dependencies #129

Closed

Conversation

markusjura
Copy link
Contributor

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

  • akka-cluster
  • akka-http-experimental
  • akka-http
  • play-ws
  • lagom-javadsl-client
  • lagom-scaladsl-client

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

Addresses #127

Does not publish the following dependent dependencies anymore (all supported versions):
- akka-cluster
- akka-http-experimental
- akka-http
- play-ws
- lagom-javadsl-client
- lagom-scaladsl-client

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

Addresses typesafehub#127
@markusjura
Copy link
Contributor Author

@jroper @huntc This is the first try of solving #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 markusjura mentioned this pull request Feb 21, 2017
@markusjura
Copy link
Contributor Author

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
Copy link
Contributor

jroper commented Feb 22, 2017

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
Copy link
Contributor Author

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

@jroper
Copy link
Contributor

jroper commented Feb 22, 2017

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
Copy link
Contributor

jroper commented Feb 22, 2017

@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
Copy link
Contributor Author

markusjura commented Feb 22, 2017

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
Copy link
Contributor Author

@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
Copy link
Contributor Author

@jroper @huntc After further discussions with @huntc and the conversations in here and at #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 #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 WIP - DON'T MERGE: Provide dependencies #129 (comment). Also, it is not straightforward and certain problems can occur as described here WIP - DON'T MERGE: Provide dependencies #129 (comment)
  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 WIP - DON'T MERGE: Provide dependencies #129 (comment)

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:

  • 2.3.0-rc.1: This version will be compatible with Lagom 1.3.x by using the latest conductr-lib version
  • 2.2.5: This version will be compatible with Lagom 1.1.x and 1.2.x by using the conductr-lib version 1.5.0

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

@jroper
Copy link
Contributor

jroper commented Feb 22, 2017

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
Copy link
Contributor

jroper commented Feb 22, 2017

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
Copy link

@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.

@huntc
Copy link
Contributor

huntc commented Jun 23, 2017

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants