diff --git a/README.md b/README.md index 6a02e00..20ac4b6 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,8 @@ This will automatically resolve the agent module, bundle the agent artifact in t By default, sbt-javaagent will only add an agent to distributions. Agents can be optionally enabled for compile, run, or test. +> **Note**: starting from v0.2.0, if the agent is only in `test` scope, it won't be added do distributions. You can set the scope to `dist;test` to retain the previous behaviour. + The following scopes are supported: * **dist** — bundle the agent in production distributions and add a `-javaagent` option to start scripts diff --git a/src/main/scala/com/lightbend/sbt/javaagent/JavaAgent.scala b/src/main/scala/com/lightbend/sbt/javaagent/JavaAgent.scala index c2ca1b0..2b70611 100644 --- a/src/main/scala/com/lightbend/sbt/javaagent/JavaAgent.scala +++ b/src/main/scala/com/lightbend/sbt/javaagent/JavaAgent.scala @@ -44,7 +44,8 @@ object JavaAgent extends JavaAgent { val inCompile = scope.compile || confs.contains(Compile.name) || confs.contains(Provided.name) val inRun = scope.run || inCompile || confs.contains(Runtime.name) val inTest = scope.test || confs.contains(Test.name) - val inDist = scope.dist + // Note: in order to not be a breaking change, dist scope defaults to true unless scope is test only + val inDist = scope.dist && !(confs.contains(Test.name) && confs.size == 1) val configuration = if (inCompile) Provided else AgentConfig val reconfiguredModule = Modules.withConfigurations(module, Some(configuration.name)) val configuredScope = AgentScope(compile = inCompile, test = inTest, run = inRun, dist = inDist) diff --git a/src/sbt-test/agent/test_and_dist/build.sbt b/src/sbt-test/agent/test_and_dist/build.sbt new file mode 100644 index 0000000..e761dc3 --- /dev/null +++ b/src/sbt-test/agent/test_and_dist/build.sbt @@ -0,0 +1,7 @@ +lazy val agentTest = project.in(file(".")).enablePlugins(JavaAgent, JavaAppPackaging) + +javaAgents += "sbt.javaagent.test" % "maxwell" % sys.props( + "project.version" +) % "dist;test" + +libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % "test" diff --git a/src/sbt-test/agent/test_and_dist/project/plugins.sbt b/src/sbt-test/agent/test_and_dist/project/plugins.sbt new file mode 100644 index 0000000..f724c69 --- /dev/null +++ b/src/sbt-test/agent/test_and_dist/project/plugins.sbt @@ -0,0 +1,2 @@ +addSbtPlugin("com.github.sbt" % "sbt-javaagent" % sys.props("project.version")) +addSbtPlugin("com.github.sbt" % "sbt-native-packager" % sys.props("packager.version")) diff --git a/src/sbt-test/agent/test_and_dist/src/main/scala/Main.scala b/src/sbt-test/agent/test_and_dist/src/main/scala/Main.scala new file mode 100644 index 0000000..41964b4 --- /dev/null +++ b/src/sbt-test/agent/test_and_dist/src/main/scala/Main.scala @@ -0,0 +1 @@ +object Main extends App diff --git a/src/sbt-test/agent/test_and_dist/src/test/scala/Test.scala b/src/sbt-test/agent/test_and_dist/src/test/scala/Test.scala new file mode 100644 index 0000000..2d1f435 --- /dev/null +++ b/src/sbt-test/agent/test_and_dist/src/test/scala/Test.scala @@ -0,0 +1,3 @@ +class Test { + @org.junit.Test def test(): Unit = () +} diff --git a/src/sbt-test/agent/test_and_dist/test b/src/sbt-test/agent/test_and_dist/test new file mode 100644 index 0000000..84a1aa5 --- /dev/null +++ b/src/sbt-test/agent/test_and_dist/test @@ -0,0 +1,2 @@ +> stage +> check diff --git a/src/sbt-test/agent/test_and_dist/test.sbt b/src/sbt-test/agent/test_and_dist/test.sbt new file mode 100644 index 0000000..e84c1e7 --- /dev/null +++ b/src/sbt-test/agent/test_and_dist/test.sbt @@ -0,0 +1,35 @@ +TaskKey[Unit]("check") := { + + assert( + (Test / javaOptions).value exists (s => + s.contains("-javaagent:") && s.contains("maxwell") + ), + "Test / javaOptions do not contain 'maxwell' agent" + ) + + assert( + !((Test / fullClasspath).value exists (f => + f.data.name.contains("maxwell") + )), + "maxwell test agent is available on the test run class path" + ) + + // Check that the agent is included in dist + + assert( + (Universal / mappings).value exists { case (file, path) => + path == "maxwell/maxwell.jar" + }, + "dist mappings do not include 'maxwell/maxwell.jar'" + ) + + import scala.sys.process._ + val output = + ((Universal / com.typesafe.sbt.packager.universal.UniversalPlugin.autoImport.stagingDirectory).value / "bin" / packageName.value).absolutePath.!! + + assert( + output contains "Agent 86", + "output does not include 'Agent 86'" + ) + +} diff --git a/src/sbt-test/agent/test_no_dist/build.sbt b/src/sbt-test/agent/test_no_dist/build.sbt new file mode 100644 index 0000000..adaa149 --- /dev/null +++ b/src/sbt-test/agent/test_no_dist/build.sbt @@ -0,0 +1,7 @@ +lazy val agentTest = project.in(file(".")).enablePlugins(JavaAgent, JavaAppPackaging) + +javaAgents += "sbt.javaagent.test" % "maxwell" % sys.props( + "project.version" +) % "test" + +libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % "test" diff --git a/src/sbt-test/agent/test_no_dist/project/plugins.sbt b/src/sbt-test/agent/test_no_dist/project/plugins.sbt new file mode 100644 index 0000000..f724c69 --- /dev/null +++ b/src/sbt-test/agent/test_no_dist/project/plugins.sbt @@ -0,0 +1,2 @@ +addSbtPlugin("com.github.sbt" % "sbt-javaagent" % sys.props("project.version")) +addSbtPlugin("com.github.sbt" % "sbt-native-packager" % sys.props("packager.version")) diff --git a/src/sbt-test/agent/test_no_dist/src/main/scala/Main.scala b/src/sbt-test/agent/test_no_dist/src/main/scala/Main.scala new file mode 100644 index 0000000..41964b4 --- /dev/null +++ b/src/sbt-test/agent/test_no_dist/src/main/scala/Main.scala @@ -0,0 +1 @@ +object Main extends App diff --git a/src/sbt-test/agent/test_no_dist/src/test/scala/Test.scala b/src/sbt-test/agent/test_no_dist/src/test/scala/Test.scala new file mode 100644 index 0000000..2d1f435 --- /dev/null +++ b/src/sbt-test/agent/test_no_dist/src/test/scala/Test.scala @@ -0,0 +1,3 @@ +class Test { + @org.junit.Test def test(): Unit = () +} diff --git a/src/sbt-test/agent/test_no_dist/test b/src/sbt-test/agent/test_no_dist/test new file mode 100644 index 0000000..84a1aa5 --- /dev/null +++ b/src/sbt-test/agent/test_no_dist/test @@ -0,0 +1,2 @@ +> stage +> check diff --git a/src/sbt-test/agent/test_no_dist/test.sbt b/src/sbt-test/agent/test_no_dist/test.sbt new file mode 100644 index 0000000..362ef6d --- /dev/null +++ b/src/sbt-test/agent/test_no_dist/test.sbt @@ -0,0 +1,35 @@ +TaskKey[Unit]("check") := { + + assert( + (Test / javaOptions).value exists (s => + s.contains("-javaagent:") && s.contains("maxwell") + ), + "Test / javaOptions do not contain 'maxwell' agent" + ) + + assert( + !((Test / fullClasspath).value exists (f => + f.data.name.contains("maxwell") + )), + "maxwell test agent is available on the test run class path" + ) + + // Check that the agent is not included in dist + + assert( + (Universal / mappings).value forall { case (file, path) => + path != "maxwell/maxwell.jar" + }, + "dist mappings include 'maxwell/maxwell.jar'" + ) + + import scala.sys.process._ + val output = + ((Universal / com.typesafe.sbt.packager.universal.UniversalPlugin.autoImport.stagingDirectory).value / "bin" / packageName.value).absolutePath.!! + + assert( + !(output contains "Agent 86"), + "output include 'Agent 86'" + ) + +}