Coder Social home page Coder Social logo

sbt-aspectj-runner's Introduction

sbt-aspectj-runner

Build Status Download

This project contains two sbt plugins that automatically configure your build to perform Load-time weaving (LTW) with Aspectj when running your application from within SBT, both for regular applications and Play Framework projects in development mode and ensure that your aspects will always be woven as expected.

SBT versions 0.13 and 1.0 are supported.

Why this plugin?

First and foremost, simplicity. Although adding the AspectJ Weaver agent is just about adding the -javaagent option to the JVM, doing so can be challenging when running from SBT. These plugins take care of the corner cases and ensure that hitting run will just work, regardless your project type or whether you are forking the JVM or not.

Regular Projects (non-Play)

Configuring

Add the sbt-aspectj-runner plugin to your project/plugins.sbt file using the code bellow:

resolvers += Resolver.bintrayRepo("kamon-io", "sbt-plugins")
addSbtPlugin("io.kamon" % "sbt-aspectj-runner" % "1.1.1")

Running

Just run, like you do all the time!

Here is what the plugin will do depending on your fork settings:

  • fork in run := true: The forked process will run with the -javaagent:<jarpath> and that's all.
  • fork in run := false: A custom classloader called WeavingURLClassLoader will be used. This classloader will perform the same load-time weaving duties done by the AspectJ Weaver agent.

Play Projects

Configuring

For Play Framework 2.7 projects add the sbt-aspectj-runner-play-2.7 to your project/plugins.sbt file:

resolvers += Resolver.bintrayIvyRepo("kamon-io", "sbt-plugins")
addSbtPlugin("io.kamon" % "sbt-aspectj-runner-play-2.7" % "1.1.2")

For Play Framework 2.6 projects add the sbt-aspectj-runner-play-2.6 to your project/plugins.sbt file:

resolvers += Resolver.bintrayIvyRepo("kamon-io", "sbt-plugins")
addSbtPlugin("io.kamon" % "sbt-aspectj-runner-play-2.6" % "1.1.2")

For Play 2.4 and 2.5 you can use the older sbt-aspectj-play-runner plugin:

resolvers += Resolver.bintrayIvyRepo("kamon-io", "sbt-plugins")
addSbtPlugin("io.kamon" % "sbt-aspectj-play-runner" % "1.0.4")

This plugin has been tested with Play 2.4.8, Play 2.5.10, Play 2.6.11 and Play 2.7.0.

Running

Just run, like you do all the time! A notice will be shown saying that you are running your application with the AspectJ Weaver.

The Play Framework SBT plugin will not allow the JVM to be forked so this plugin will override the way class loaders are created to use WeavingURLClassLoader instead, making sure that aspects will be woven when running on Development mode.

Examples

There are full runnable examples.

sbt-aspectj-runner's People

Contributors

ashleymercer avatar crypticmind avatar dpsoft avatar ivantopo avatar mladens avatar rockjam avatar smagnacco avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

sbt-aspectj-runner's Issues

Incorrect aspectjweaver jar used for 'javaagent:' if aspectjweaver-1.8.6-sources.jar is present.

OS: OS X, El Capitan
Scala version: 2.11.8
Java Version: 1.8.0_77
SBT Version: 0.13.13

If the aspectjweaver-1.8.6-sources.jar is present under .ivy2/cache/org.aspectj/aspectjweaver/srcs, the sbt-aspectj-runner will erroneously use that jar for the javaagent instead of correctly using .ivy2/cache/org.aspectj/aspectjweaver/jars/aspectjweaver-1.8.6.jar.

The following error is raised when executing aspectj-runner:run:

[info] Error occurred during initialization of VM
[error] Failed to find Premain-Class manifest attribute in /Users/sweaver/.ivy2/cache/org.aspectj/aspectjweaver/srcs/aspectjweaver-1.8.6-sources.jar
[info] agent library failed to init: instrument
java.lang.RuntimeException: Nonzero exit code returned from runner: 1
	at scala.sys.package$.error(package.scala:27)

Steps to reproduce:

  1. Explicitly add the aspectj weaver as a dependency and have it set to download sources:
    "org.aspectj" % "aspectjweaver" % aspectJVersion withSources() withJavadoc()
  2. Make sure that fork in run := true
  3. Reload/start SBT.
  4. Execute aspectj-runner:run
  5. Should fail

Work-around

  1. Remove 'withSources()' from the dependency:
    "org.aspectj" % "aspectjweaver" % aspectJVersion withJavadoc()
  2. Delete ivy2/cache/org.aspectj/aspectjweaver/srcs/aspectjweaver-1.8.6-sources.jar
  3. Reload/start SBT.
  4. Execute aspectj-runner:run
  5. Should run as expected

Overriding configuration file

Hi!

The default Play run command allows overriding config locations like this:

run -Dconfig.file=conf/whatever.conf

Is there a way to tell aspectj-runner to do the same somehow?

Thanks!

Cannot download 1.1.1 artifacts

Firstly - thanks for the speedy turnaround on #26 :)

I'm trying to use the new jars with this configuration:

addSbtPlugin("io.kamon"             % "sbt-aspectj-runner"          % "1.1.1")
addSbtPlugin("io.kamon"             % "sbt-aspectj-runner-play-2.6" % "1.1.1")

but am getting the following error:

[warn] 	Note: Some unresolved dependencies have extra attributes.  Check that these dependencies exist with the requested attributes.
[warn] 		io.kamon:sbt-aspectj-runner-play-2.6:1.1.1 (scalaVersion=2.12, sbtVersion=1.0)

Setting the version numbers back to 1.1.0 seems to work fine.

Can't resolve sbt-aspectj-runner-play-2.6

I know bintray/jcenter was having issues yesterday so this might be related but I can't get the plugin to resolve in my Play project.

I'm using Play 2.6.7, Scala 2.12.3 and sbt 1.0.4

Here's my sbt output:

[warn]  module not found: io.kamon#sbt-aspectj-runner-play-2.6;1.1.0
[warn] ==== typesafe-ivy-releases: tried
[warn]   https://repo.typesafe.com/typesafe/ivy-releases/io.kamon/sbt-aspectj-runner-play-2.6/scala_2.12/sbt_1.0/1.1.0/ivys/ivy.xml
[warn] ==== sbt-plugin-releases: tried
[warn]   https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/io.kamon/sbt-aspectj-runner-play-2.6/scala_2.12/sbt_1.0/1.1.0/ivys/ivy.xml
[warn] ==== local: tried
[warn]   /Users/erik/.ivy2/local/io.kamon/sbt-aspectj-runner-play-2.6/scala_2.12/sbt_1.0/1.1.0/ivys/ivy.xml
[warn] ==== public: tried
[warn]   https://repo1.maven.org/maven2/io/kamon/sbt-aspectj-runner-play-2.6_2.12_1.0/1.1.0/sbt-aspectj-runner-play-2.6-1.1.0.pom
[warn] ==== activator-launcher-local: tried
[warn]   /Users/erik/.activator/repository/io.kamon/sbt-aspectj-runner-play-2.6/scala_2.12/sbt_1.0/1.1.0/ivys/ivy.xml
[warn] ==== activator-local: tried
[warn]   /Users/erik/.sdkman/candidates/activator/1.3.10/repository/io.kamon/sbt-aspectj-runner-play-2.6/scala_2.12/sbt_1.0/1.1.0/ivys/ivy.xml
[warn] ==== typesafe-releases: tried
[warn]   http://repo.typesafe.com/typesafe/releases/io/kamon/sbt-aspectj-runner-play-2.6_2.12_1.0/1.1.0/sbt-aspectj-runner-play-2.6-1.1.0.pom
[warn] ==== typesafe-ivy-releasez: tried
[warn]   http://repo.typesafe.com/typesafe/ivy-releases/io.kamon/sbt-aspectj-runner-play-2.6/scala_2.12/sbt_1.0/1.1.0/ivys/ivy.xml
[warn] ==== bintray-kamon-io-sbt-plugins: tried
[warn]   https://dl.bintray.com/kamon-io/sbt-plugins/io/kamon/sbt-aspectj-runner-play-2.6_2.12_1.0/1.1.0/sbt-aspectj-runner-play-2.6-1.1.0.pom
[warn] ==== Flyway: tried
[warn]   https://davidmweber.github.io/flyway-sbt.repo/io/kamon/sbt-aspectj-runner-play-2.6_2.12_1.0/1.1.0/sbt-aspectj-runner-play-2.6-1.1.0.pom
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: io.kamon#sbt-aspectj-runner-play-2.6;1.1.0: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn] 
[warn]  Note: Some unresolved dependencies have extra attributes.  Check that these dependencies exist with the requested attributes.
[warn]          io.kamon:sbt-aspectj-runner-play-2.6:1.1.0 (scalaVersion=2.12, sbtVersion=1.0)
[warn] 
[warn]  Note: Unresolved dependencies path:
[warn]          io.kamon:sbt-aspectj-runner-play-2.6:1.1.0 (scalaVersion=2.12, sbtVersion=1.0) 

Here's my plugins.sbt:

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.7")
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.2")

resolvers += Resolver.bintrayRepo("kamon-io", "sbt-plugins")
addSbtPlugin("io.kamon" % "sbt-aspectj-runner-play-2.6" % "1.1.0")

resolvers += "Flyway" at "https://davidmweber.github.io/flyway-sbt.repo"
addSbtPlugin("org.flywaydb" % "flyway-sbt" % "4.2.0")

unresolved dependency: io.kamon#sbt-aspectj-runner;1.1-

I just cloned the akka-ping-pong-with-kamon example from this repo to quickly try out akka-kamon module. But I run into below error when I do "sbt run" -

Any help to resolve this issue will be appreciated. Thanks!

[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: io.kamon#sbt-aspectj-runner;1.1-73454753f2290789913ff1f4bba8a620c7142f77: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]
[warn]  Note: Some unresolved dependencies have extra attributes.  Check that these dependencies exist with the requested attributes.
[warn]          io.kamon:sbt-aspectj-runner:1.1-73454753f2290789913ff1f4bba8a620c7142f77 (scalaVersion=2.12, sbtVersion=1.0)
[warn]
[warn]  Note: Unresolved dependencies path:
[warn]          io.kamon:sbt-aspectj-runner:1.1-73454753f2290789913ff1f4bba8a620c7142f77 (scalaVersion=2.12, sbtVersion=1.0) (C:\Users\v160771\Documents\development\github\sbt-aspectj-runner\examples\akka-ping-pong-with-kamon\project\plugins.sbt#L2-3)
[warn]            +- default:akka-ping-pong-with-kamon-build:0.1-SNAPSHOT (scalaVersion=2.12, sbtVersion=1.0)
[error] sbt.librarymanagement.ResolveException: unresolved dependency: io.kamon#sbt-aspectj-runner;1.1-73454753f2290789913ff1f4bba8a620c7142f77: not found
[error]         at sbt.internal.librarymanagement.IvyActions$.resolveAndRetrieve(IvyActions.scala:331)
[error]         at sbt.internal.librarymanagement.IvyActions$.$anonfun$updateEither$1(IvyActions.scala:205)
[error]         at sbt.internal.librarymanagement.IvySbt$Module.$anonfun$withModule$1(Ivy.scala:243)
[error]         at sbt.internal.librarymanagement.IvySbt.$anonfun$withIvy$1(Ivy.scala:204)
[error]         at sbt.internal.librarymanagement.IvySbt.sbt$internal$librarymanagement$IvySbt$$action$1(Ivy.scala:70)
[error]         at sbt.internal.librarymanagement.IvySbt$$anon$3.call(Ivy.scala:77)
[error]         at xsbt.boot.Locks$GlobalLock.withChannel$1(Locks.scala:93)
[error]         at xsbt.boot.Locks$GlobalLock.xsbt$boot$Locks$GlobalLock$$withChannelRetries$1(Locks.scala:78)
[error]         at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock$1.apply(Locks.scala:97)
[error]         at xsbt.boot.Using$.withResource(Using.scala:10)
[error]         at xsbt.boot.Using$.apply(Using.scala:9)
[error]         at xsbt.boot.Locks$GlobalLock.ignoringDeadlockAvoided(Locks.scala:58)
[error]         at xsbt.boot.Locks$GlobalLock.withLock(Locks.scala:48)
[error]         at xsbt.boot.Locks$.apply0(Locks.scala:31)
[error]         at xsbt.boot.Locks$.apply(Locks.scala:28)
[error]         at sbt.internal.librarymanagement.IvySbt.withDefaultLogger(Ivy.scala:77)
[error]         at sbt.internal.librarymanagement.IvySbt.withIvy(Ivy.scala:199)
[error]         at sbt.internal.librarymanagement.IvySbt.withIvy(Ivy.scala:196)
[error]         at sbt.internal.librarymanagement.IvySbt$Module.withModule(Ivy.scala:242)
[error]         at sbt.internal.librarymanagement.IvyActions$.updateEither(IvyActions.scala:190)
[error]         at sbt.librarymanagement.ivy.IvyDependencyResolution.update(IvyDependencyResolution.scala:20)
[error]         at sbt.librarymanagement.DependencyResolution.update(DependencyResolution.scala:56)
[error]         at sbt.internal.LibraryManagement$.resolve$1(LibraryManagement.scala:38)
[error]         at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$12(LibraryManagement.scala:91)
[error]         at sbt.util.Tracked$.$anonfun$lastOutput$1(Tracked.scala:68)
[error]         at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$19(LibraryManagement.scala:104)
[error]         at scala.util.control.Exception$Catch.apply(Exception.scala:224)
[error]         at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$11(LibraryManagement.scala:104)
[error]         at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$11$adapted(LibraryManagement.scala:87)
[error]         at sbt.util.Tracked$.$anonfun$inputChanged$1(Tracked.scala:149)
[error]         at sbt.internal.LibraryManagement$.cachedUpdate(LibraryManagement.scala:118)
[error]         at sbt.Classpaths$.$anonfun$updateTask$5(Defaults.scala:2356)
[error]         at scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error]         at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:42)
[error]         at sbt.std.Transform$$anon$4.work(System.scala:64)
[error]         at sbt.Execute.$anonfun$submit$2(Execute.scala:257)
[error]         at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error]         at sbt.Execute.work(Execute.scala:266)
[error]         at sbt.Execute.$anonfun$submit$1(Execute.scala:257)
[error]         at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:167)
[error]         at sbt.CompletionService$$anon$2.call(CompletionService.scala:32)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[error]         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[error]         at java.lang.Thread.run(Thread.java:748)
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? [error] (*:update) sbt.librarymanagement.ResolveException: unresolved dependency: io.kamon#sbt-aspectj-runner;1.1-73454753f2290789913ff1f4bba8a620c7142f77: not found

Unable to authenticate bouncy castle

hello added this plugin and now I'm seeing this error in my play-2.6 app. Does this have something to do with AspectJ?


play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[NoSuchProviderException: JCE cannot authenticate the provider BC]]
	at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:255)
	at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:182)
	at play.core.server.AkkaHttpServer$$anonfun$2.applyOrElse(AkkaHttpServer.scala:310)
	at play.core.server.AkkaHttpServer$$anonfun$2.applyOrElse(AkkaHttpServer.scala:308)
	at scala.concurrent.Future.$anonfun$recoverWith$1(Future.scala:414)
	at scala.concurrent.impl.Promise.$anonfun$transformWith$1(Promise.scala:37)
	at scala.concurrent.impl.CallbackRunnable.run_aroundBody0(Promise.scala:60)
	at scala.concurrent.impl.CallbackRunnable$AjcClosure1.run(Promise.scala:1)
	at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:149)
	at kamon.scala.instrumentation.FutureInstrumentation.$anonfun$aroundExecution$1(FutureInstrumentation.scala:46)
	at kamon.Kamon$.withContext(Kamon.scala:120)
	at kamon.scala.instrumentation.FutureInstrumentation.aroundExecution(FutureInstrumentation.scala:46)
	at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:59)
	at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
	at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:91)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
	at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:81)
	at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:91)
	at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40)
	at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(ForkJoinExecutorConfigurator.scala:43)
	at akka.dispatch.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
	at akka.dispatch.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
	at akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
	at akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.security.NoSuchProviderException: JCE cannot authenticate the provider BC
	at javax.crypto.JceSecurity.getInstance(JceSecurity.java:100)
	at javax.crypto.Mac.getInstance(Mac.java:222)
	at pdi.jwt.JwtUtils$.sign(JwtUtils.scala:121)
	at pdi.jwt.JwtUtils$.sign(JwtUtils.scala:150)
	at pdi.jwt.JwtUtils$.sign(JwtUtils.scala:159)
	at pdi.jwt.JwtCore.encode(Jwt.scala:80)
	at pdi.jwt.JwtCore.encode$(Jwt.scala:78)
	at pdi.jwt.JwtJson$.encode(JwtJson.scala:12)
	at pdi.jwt.JwtJsonCommon.encode(JwtJsonCommon.scala:25)
	at pdi.jwt.JwtJsonCommon.encode$(JwtJsonCommon.scala:24)
	at pdi.jwt.JwtJson$.encode(JwtJson.scala:12)
	at pdi.jwt.JwtSession.serialize(JwtSession.scala:61)
	at pdi.jwt.JwtPlayImplicits$RichResult.withJwtSession(JwtPlayImplicits.scala:61)
	at pdi.jwt.JwtPlayImplicits$RichResult.addingToJwtSession(JwtPlayImplicits.scala:82)
	at controllers.LoginController.$anonfun$index$2(LoginController.scala:61)
	at scala.util.Success.$anonfun$map$1(Try.scala:251)
	at scala.util.Success.map(Try.scala:209)
	at scala.concurrent.Future.$anonfun$map$1(Future.scala:289)
	at scala.concurrent.impl.Promise.liftedTree1$1(Promise.scala:29)
	at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:29)
	... 18 common frames omitted
Caused by: java.util.jar.JarException: Class is on the bootclasspath
	at javax.crypto.JarVerifier.verify(JarVerifier.java:286)
	at javax.crypto.JceSecurity.verifyProviderJar(JceSecurity.java:159)
	at javax.crypto.JceSecurity.getVerificationResult(JceSecurity.java:185)
	at javax.crypto.JceSecurity.getInstance(JceSecurity.java:97)
	... 37 common frames omitted```

Including plugin breaks the redshift driver

When I include it like this:

resolvers += Resolver.bintrayIvyRepo("kamon-io", "sbt-plugins")
addSbtPlugin("io.kamon" % "sbt-aspectj-runner-play-2.6" % "1.1.0")

I get an error on startup when play tries to start up a connection to redshift using these settings:

db {
  ...
  reporting {
    driver = "com.amazon.redshift.jdbc42.Driver"
    url = "jdbc:redshift://....redshift.amazonaws.com:5439/dbname"
    username = "..."
    password = "..."
  }
}

Driver jar: https://s3.amazonaws.com/redshift-downloads/drivers/jdbc/1.2.12.1017/RedshiftJDBC42-1.2.12.1017.jar

play.api.Configuration$$anon$1: Configuration error[Cannot connect to database [reporting]]
	at play.api.Configuration$.configError(Configuration.scala:156)
	at play.api.Configuration.reportError(Configuration.scala:990)
	at play.api.db.DefaultDBApi$$anonfun$connect$1.apply(DefaultDBApi.scala:48)
	at play.api.db.DefaultDBApi$$anonfun$connect$1.apply(DefaultDBApi.scala:42)
...
Caused by: java.lang.NullPointerException: null
	at java.io.File.<init>(File.java:277)
	at com.amazon.redshift.common.PGClassLoaderSingleton.validateTempDir(Unknown Source)
	at com.amazon.redshift.jdbc.Driver.getInstance(Unknown Source)
	at com.amazon.redshift.jdbc.Driver.acceptsURL(Unknown Source)
	at com.zaxxer.hikari.util.DriverDataSource.<init>(DriverDataSource.java:105)
	at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:342)
	at com.zaxxer.hikari.pool.PoolBase.<init>(PoolBase.java:117)
	at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:107)
	at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:82)
	at play.api.db.HikariCPConnectionPool$$anonfun$1.apply(HikariCPModule.scala:51)
	at play.api.db.HikariCPConnectionPool$$anonfun$1.apply(HikariCPModule.scala:47)
	at scala.util.Try$.apply(Try.scala:192)
	at play.api.db.HikariCPConnectionPool.create(HikariCPModule.scala:47)
	at play.api.db.PooledDatabase.createDataSource(Databases.scala:199)
	at play.api.db.DefaultDatabase.dataSource$lzycompute(Databases.scala:123)
	at play.api.db.DefaultDatabase.dataSource(Databases.scala:121)
	at play.api.db.DefaultDatabase.getConnection(Databases.scala:142)
	at play.api.db.DefaultDatabase.getConnection(Databases.scala:138)
	at play.api.db.DefaultDBApi$$anonfun$connect$1.apply(DefaultDBApi.scala:44)
	at play.api.db.DefaultDBApi$$anonfun$connect$1.apply(DefaultDBApi.scala:42)
	at scala.collection.immutable.List.foreach(List.scala:392)
	at play.api.db.DefaultDBApi.connect(DefaultDBApi.scala:42)
	at play.api.db.DBApiProvider.get$lzycompute(DBModule.scala:86)
	at play.api.db.DBApiProvider.get(DBModule.scala:75)
	at play.api.db.DBApiProvider.get(DBModule.scala:56)
	at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:81)
	at com.google.inject.internal.BoundProviderFactory.provision(BoundProviderFactory.java:72)
	at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:61)
	at com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:62)
	at com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:54)

The error disappears if I remove the sbt plugin.

Classpath issues in dev mode

I expect to be able to set the play config resource via command-line argument. I have tried several different ways.

sbt -Dconfig.resource=application.local.conf run

Relevant output

--- (Running the application, auto-reloading is enabled) ---

[error] com.typesafe.config.ConfigException$IO: application.local.conf: java.io.IOException: resource not found on classpath: application.local.conf
[error] 	at com.typesafe.config.impl.Parseable.parseValue(Parseable.java:188)
[error] 	at com.typesafe.config.impl.Parseable.parseValue(Parseable.java:174)
[error] 	at com.typesafe.config.impl.Parseable.parse(Parseable.java:299)
[error] 	at com.typesafe.config.ConfigFactory.parseResources(ConfigFactory.java:957)
[error] 	at com.typesafe.config.ConfigFactory.parseResources(ConfigFactory.java:885)
[error] 	at com.typesafe.config.DefaultConfigLoadingStrategy.parseApplicationConfig(DefaultConfigLoadingStrategy.java:49)
[error] 	at com.typesafe.config.ConfigFactory.defaultApplication(ConfigFactory.java:473)
[error] 	at com.typesafe.config.ConfigFactory$1.call(ConfigFactory.java:259)
[error] 	at com.typesafe.config.ConfigFactory$1.call(ConfigFactory.java:256)
[error] 	at com.typesafe.config.impl.ConfigImpl$LoaderCache.getOrElseUpdate(ConfigImpl.java:65)
[error] 	at com.typesafe.config.impl.ConfigImpl.computeCachedConfig(ConfigImpl.java:92)
[error] 	at com.typesafe.config.ConfigFactory.load(ConfigFactory.java:256)
[error] 	at com.typesafe.config.ConfigFactory.load(ConfigFactory.java:232)
[error] 	at kamon.Kamon$.<init>(Kamon.scala:35)
[error] 	at kamon.Kamon$.<clinit>(Kamon.scala)
[error] 	at kamon.context.HasContext$.fromCurrentContext(Mixin.scala:44)
[error] 	at kamon.scala.instrumentation.FutureInstrumentation.mixinTraceContextAwareToFutureRelatedRunnable(FutureInstrumentation.scala:29)
[error] 	at scala.concurrent.impl.CallbackRunnable.context(Promise.scala:1)
[error] 	at kamon.scala.instrumentation.FutureInstrumentation.afterCreation(FutureInstrumentation.scala:37)
[error] 	at scala.concurrent.impl.CallbackRunnable.<init>(Promise.scala:54)
[error] 	at scala.concurrent.impl.Promise$DefaultPromise.onComplete(Promise.scala:303)
[error] 	at akka.actor.ActorSystemImpl$TerminationCallbacks.<init>(ActorSystem.scala:1008)
[error] 	at akka.actor.ActorSystemImpl.<init>(ActorSystem.scala:800)
[error] 	at akka.actor.ActorSystem$.apply(ActorSystem.scala:246)
[error] 	at akka.actor.ActorSystem$.apply(ActorSystem.scala:289)
[error] 	at akka.actor.ActorSystem$.apply(ActorSystem.scala:264)
[error] 	at play.core.server.DevServerStart$.$anonfun$mainDev$1(DevServerStart.scala:224)
[error] 	at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
[error] 	at play.core.server.DevServerStart$.mainDev(DevServerStart.scala:59)
[error] 	at play.core.server.DevServerStart$.mainDevHttpMode(DevServerStart.scala:49)
[error] 	at play.core.server.DevServerStart.mainDevHttpMode(DevServerStart.scala)
[error] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error] 	at java.lang.reflect.Method.invoke(Method.java:498)
[error] 	at kamon.aspectj.sbt.play.AspectJReloader$.startDevMode(AspectJReloader.scala:221)
[error] 	at kamon.aspectj.sbt.play.AspectJPlayRun$.devModeServer$lzycompute$1(AspectJPlayRun.scala:60)
[error] 	at kamon.aspectj.sbt.play.AspectJPlayRun$.devModeServer$1(AspectJPlayRun.scala:44)
[error] 	at kamon.aspectj.sbt.play.AspectJPlayRun$.$anonfun$playRunTask$3(AspectJPlayRun.scala:67)
[error] 	at kamon.aspectj.sbt.play.AspectJPlayRun$.$anonfun$playRunTask$3$adapted(AspectJPlayRun.scala:30)
[error] 	at scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error] 	at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:39)
[error] 	at sbt.std.Transform$$anon$4.work(System.scala:66)
[error] 	at sbt.Execute.$anonfun$submit$2(Execute.scala:262)
[error] 	at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error] 	at sbt.Execute.work(Execute.scala:271)
[error] 	at sbt.Execute.$anonfun$submit$1(Execute.scala:262)
[error] 	at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:174)
[error] 	at sbt.CompletionService$$anon$2.call(CompletionService.scala:36)
[error] 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error] 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error] 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error] 	at java.lang.Thread.run(Thread.java:748)
[error] Caused by: java.io.IOException: resource not found on classpath: application.local.conf
[error] 	at com.typesafe.config.impl.Parseable$ParseableResources.rawParseValue(Parseable.java:735)
[error] 	at com.typesafe.config.impl.Parseable$ParseableResources.rawParseValue(Parseable.java:710)
[error] 	at com.typesafe.config.impl.Parseable.parseValue(Parseable.java:180)
[error] 	at com.typesafe.config.impl.Parseable.parseValue(Parseable.java:174)
[error] 	at com.typesafe.config.impl.Parseable.parse(Parseable.java:299)
[error] 	at com.typesafe.config.ConfigFactory.parseResources(ConfigFactory.java:957)
[error] 	at com.typesafe.config.ConfigFactory.parseResources(ConfigFactory.java:885)
[error] 	at com.typesafe.config.DefaultConfigLoadingStrategy.parseApplicationConfig(DefaultConfigLoadingStrategy.java:49)
[error] 	at com.typesafe.config.ConfigFactory.defaultApplication(ConfigFactory.java:473)
[error] 	at com.typesafe.config.ConfigFactory$1.call(ConfigFactory.java:259)
[error] 	at com.typesafe.config.ConfigFactory$1.call(ConfigFactory.java:256)
[error] 	at com.typesafe.config.impl.ConfigImpl$LoaderCache.getOrElseUpdate(ConfigImpl.java:65)
[error] 	at com.typesafe.config.impl.ConfigImpl.computeCachedConfig(ConfigImpl.java:92)
[error] 	at com.typesafe.config.ConfigFactory.load(ConfigFactory.java:256)
[error] 	at com.typesafe.config.ConfigFactory.load(ConfigFactory.java:232)
[error] 	at kamon.Kamon$.<init>(Kamon.scala:35)
[error] 	at kamon.Kamon$.<clinit>(Kamon.scala)
[error] 	at kamon.context.HasContext$.fromCurrentContext(Mixin.scala:44)
[error] 	at kamon.scala.instrumentation.FutureInstrumentation.mixinTraceContextAwareToFutureRelatedRunnable(FutureInstrumentation.scala:29)
[error] 	at scala.concurrent.impl.CallbackRunnable.context(Promise.scala:1)
[error] 	at kamon.scala.instrumentation.FutureInstrumentation.afterCreation(FutureInstrumentation.scala:37)
[error] 	at scala.concurrent.impl.CallbackRunnable.<init>(Promise.scala:54)
[error] 	at scala.concurrent.impl.Promise$DefaultPromise.onComplete(Promise.scala:303)
[error] 	at akka.actor.ActorSystemImpl$TerminationCallbacks.<init>(ActorSystem.scala:1008)
[error] 	at akka.actor.ActorSystemImpl.<init>(ActorSystem.scala:800)
[error] 	at akka.actor.ActorSystem$.apply(ActorSystem.scala:246)
[error] 	at akka.actor.ActorSystem$.apply(ActorSystem.scala:289)
[error] 	at akka.actor.ActorSystem$.apply(ActorSystem.scala:264)
[error] 	at play.core.server.DevServerStart$.$anonfun$mainDev$1(DevServerStart.scala:224)
[error] 	at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
[error] 	at play.core.server.DevServerStart$.mainDev(DevServerStart.scala:59)
[error] 	at play.core.server.DevServerStart$.mainDevHttpMode(DevServerStart.scala:49)
[error] 	at play.core.server.DevServerStart.mainDevHttpMode(DevServerStart.scala)
[error] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error] 	at java.lang.reflect.Method.invoke(Method.java:498)
[error] 	at kamon.aspectj.sbt.play.AspectJReloader$.startDevMode(AspectJReloader.scala:221)
[error] 	at kamon.aspectj.sbt.play.AspectJPlayRun$.devModeServer$lzycompute$1(AspectJPlayRun.scala:60)
[error] 	at kamon.aspectj.sbt.play.AspectJPlayRun$.devModeServer$1(AspectJPlayRun.scala:44)
[error] 	at kamon.aspectj.sbt.play.AspectJPlayRun$.$anonfun$playRunTask$3(AspectJPlayRun.scala:67)
[error] 	at kamon.aspectj.sbt.play.AspectJPlayRun$.$anonfun$playRunTask$3$adapted(AspectJPlayRun.scala:30)
[error] 	at scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error] 	at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:39)
[error] 	at sbt.std.Transform$$anon$4.work(System.scala:66)
[error] 	at sbt.Execute.$anonfun$submit$2(Execute.scala:262)
[error] 	at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error] 	at sbt.Execute.work(Execute.scala:271)
[error] 	at sbt.Execute.$anonfun$submit$1(Execute.scala:262)
[error] 	at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:174)
[error] 	at sbt.CompletionService$$anon$2.call(CompletionService.scala:36)
[error] 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error] 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error] 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error] 	at java.lang.Thread.run(Thread.java:748)

Also tried sbt -Dconfig.file=conf/application.local.conf run

Relevant output

--- (Running the application, auto-reloading is enabled) ---

[error] k.c.Codecs - Failed to initialize codec for key [request-id]
java.lang.ClassNotFoundException: util.RequestIdCodec
	at org.aspectj.weaver.bcel.ExtensibleURLClassLoader.findClass(ExtensibleURLClassLoader.java:56)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:348)
	at kamon.util.DynamicAccess.$anonfun$getClassFor$1(DynamicAccess.scala:35)
	at scala.util.Try$.apply(Try.scala:209)
	at kamon.util.DynamicAccess.getClassFor(DynamicAccess.scala:34)
	at kamon.util.DynamicAccess.createInstanceFor(DynamicAccess.scala:52)
	at kamon.context.Codecs.$anonfun$readEntryCodecs$1(Codecs.scala:65)
[error] k.c.Codecs - Failed to initialize codec for key [span]
java.lang.ClassNotFoundException: util.NoopCodec
	at org.aspectj.weaver.bcel.ExtensibleURLClassLoader.findClass(ExtensibleURLClassLoader.java:56)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:348)
	at kamon.util.DynamicAccess.$anonfun$getClassFor$1(DynamicAccess.scala:35)
	at scala.util.Try$.apply(Try.scala:209)
	at kamon.util.DynamicAccess.getClassFor(DynamicAccess.scala:34)
	at kamon.util.DynamicAccess.createInstanceFor(DynamicAccess.scala:52)
	at kamon.context.Codecs.$anonfun$readEntryCodecs$1(Codecs.scala:65)
[info] p.c.s.AkkaHttpServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Enter to stop and go back to the console...)

prod mode via sbt -Dconfig.resource=application.local.conf runProd does not produce an error at startup, but the configuration setting is not respected, which can be observed by hitting localhost:9000 and seeing that b3 headers are propagated, whereas they should not be based on the config file.

Repro via https://github.com/jsw/play-2.6-with-kamon/tree/78c5c32e20807477df3d5d675a980d0eb0cd873a

Package not found for Play 2.6

Hi guys,

I tried to add sbt-aspectj-runner to Play 2.6.5 but this dependency did not resolve.

resolvers += Resolver.bintrayIvyRepo("kamon-io", "sbt-plugins")
addSbtPlugin("io.kamon" % "sbt-aspectj-play-runner-2.6" % "1.0.2")

Any ideas?

Akka Typed support

I wonder if it's possible to use the weaver with typed ActorSystem as well as typed actors.

Check for sample project here.

I get NPE in runtime.

java.lang.NullPointerException
at akka.kamon.instrumentation.DispatcherInstrumentation.afterCreateExecutorService(DispatcherInstrumentation.scala:141)
at akka.dispatch.ForkJoinExecutorConfigurator$ForkJoinExecutorServiceFactory.createExecutorService(ForkJoinExecutorConfigurator.scala:72)
at akka.typed.internal.DispatcherConfigurator.<init>(DispatchersImpl.scala:191)
at akka.typed.internal.DispatchersImpl.configuratorFrom(DispatchersImpl.scala:129)
at akka.typed.internal.DispatchersImpl.lookupConfigurator(DispatchersImpl.scala:86)
at akka.typed.internal.DispatchersImpl.lookup(DispatchersImpl.scala:64)
at akka.typed.internal.DispatchersImpl.defaultGlobalDispatcher(DispatchersImpl.scala:46)
at akka.typed.internal.DispatchersImpl.lookup(DispatchersImpl.scala:22)
at akka.typed.internal.ActorSystemImpl.<init>(ActorSystemImpl.scala:189)
at akka.typed.ActorSystem$.apply(ActorSystem.scala:175)
at com.sample.Sample$.delayedEndpoint$com$sample$Sample$1(Main.scala:4)
at com.sample.Sample$delayedInit$body.apply(Main.scala:3)
at scala.Function0.apply$mcV$sp(Function0.scala:34)
at scala.Function0.apply$mcV$sp$(Function0.scala:34)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App.$anonfun$main$1$adapted(App.scala:76)
at scala.collection.immutable.List.foreach(List.scala:389)
at scala.App.main(App.scala:76)
at scala.App.main$(App.scala:74)
at com.sample.Sample$.main(Main.scala:3)
at com.sample.Sample.main(Main.scala)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at kamon.aspectj.sbt.SbtAspectJRunner$RunWithAspectJ.invokeMain(SbtAspectJRunner.scala:124)
at kamon.aspectj.sbt.SbtAspectJRunner$RunWithAspectJ.run0(SbtAspectJRunner.scala:108)
at kamon.aspectj.sbt.SbtAspectJRunner$RunWithAspectJ.execute$1(SbtAspectJRunner.scala:98)
at kamon.aspectj.sbt.SbtAspectJRunner$RunWithAspectJ.$anonfun$run$2(SbtAspectJRunner.scala:101)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
at sbt.util.InterfaceUtil$$anon$1.get(InterfaceUtil.scala:10)
at sbt.TrapExit$App.run(TrapExit.scala:252)
at java.base/java.lang.Thread.run(Thread.java:844)

Task name conflict prevents use with lightbend's sbt aspectj weaver

Note, this is a cross-post of the issue I filed in the other plugin.


Upgrading our tooling to Scala 2.12, SBT 0.13.16 and newest (0.11.0) version of this plugin as well as the newest (1.0.1) version of the sbt aspectj runner plugin.

Get this on SBT start:

java.lang.RuntimeException: Some keys were defined with the same name but different types: 'aspectjWeaver' (sbt.Task[scala.Option[java.io.File]], sbt.Task[java.io.File])
	at scala.sys.package$.error(package.scala:27)
	at sbt.Index$.stringToKeyMap0(EvaluateConfigurations.scala:296)
	at sbt.Index$.stringToKeyMap(EvaluateConfigurations.scala:287)
	at sbt.Load$.structureIndex(Load.scala:209)
	at sbt.Load$$anonfun$9.apply(Load.scala:165)
	at sbt.Load$$anonfun$9.apply(Load.scala:165)
	at sbt.Load$.timed(Load.scala:1025)
	at sbt.Load$.apply(Load.scala:164)
	at sbt.Load$.defaultLoad(Load.scala:39)

I tracked it down to the fact that this plugins both define aspectjWeaver keys with different types:

trait AspectjKeys {
    val aspectjWeaver = taskKey[Option[File]]("Location of AspectJ load-time weaver.")
}

kamon plugin's definition

 object Keys {
    val aspectjWeaver = TaskKey[File]("aspectj-weaver")
  }

I'm going to continue looking for a workaround but i suspect that this could be resolved easily by prefixing the keys to make them unique. It will be a breaking change for some, but at least it will play nicely with other plugins.

sbt-aspectj-runner for play production mode - Play 2.6

Hi, I am stuck in a place where the sbt-aspectj-runner plugin loads the aspectjweaver in development mode but unfortunately its not behaving the same way when i build the dist and run it.
Can someone help on this, is it officially this plugin does not support production mode for play projects? is there any work-around that i could make it to work in production mode.

Play 2.4 + tests not working

$ project project
// works fine
$ test
// works fine
$ aspectj-runner:run
// works fine
$ aspectj-runner-test:run
java.lang.RuntimeException: No main class detected.
        at scala.sys.package$.error(package.scala:27)

In main build, I've

.settings(kamon.aspectj.sbt.AspectjRunner.testSettings :_*)

which repo host addSbtPlugin("io.kamon" % "aspectj-play-24-runner" % "0.1.3")

I encountered the following when try to use the plugin - should I add another repo to resolve it? Thaks

[error] (*:update) sbt.ResolveException: unresolved dependency: io.kamon#aspectj-play-24-runner;0.1.3: not found
and this is the content in plugins.sbt
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/ivy-releases/"
Thanks
cl

Version stuck to 1.8.10

We followed the guides to include aspectj weaver into our non-Play project using

addSbtPlugin("io.kamon" % "sbt-aspectj-runner" % "1.1.2")
addSbtPlugin("com.lightbend.sbt" % "sbt-javaagent" % "0.1.4")

and to the build.sbt:

lazy val root = (project in file("."))
  .enablePlugins(JavaAppPackaging, JavaAgent)

javaAgents += "org.aspectj" % "aspectjweaver" % "1.9.4"
javaOptions in Universal += "-Dorg.aspectj.tracing.factory=default"

But a run of sbt dependencyUpdates states that:

[expired   ] org.aspectj:aspectjweaver:1.8.10 ---> 1.9.4

I guess it is related to the constant defined here: https://github.com/kamon-io/sbt-aspectj-runner/blob/master/sbt-aspectj-runner/src/main/scala/kamon/aspectj/sbt/SbtAspectJRunner.scala#L28

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.