0
私はsbt autopluginを持っています。ユーザーがタスクを実行するときに、-javaagentで新しいJVMをforkしたいと思います。タスクはjammを使用してメモリを測定する必要があります。私は、コマンドラインからsbt perf
を実行するとsbt autoplugin:タスク用javaagentを追加します。
object SbtMemory extends AutoPlugin {
object autoImport {
val agentTest = inputKey[Unit]("Run task with javaagent")
}
def makeAgentOptions(classpath: Classpath) : String = {
val jammJar = classpath.map(_.data).filter(_.toString.contains("jamm")).head
s"-javaagent:$jammJar"
}
override lazy val projectSettings =
Seq(
agentTest := agentTask.value,
fork in agentTest := true,
javaOptions in agentTest += (dependencyClasspath in Test).map(makeAgentOptions).value
)
lazy val agentTask = Def.task {
val o = new Array[Byte](1024*1024)
val mm = new MemoryMeter()
println("Size of new Array[Byte](1024*1024): " + mm.measureDeep(o))
}
}
、私は次の例外を取得:
java.lang.IllegalStateException: Instrumentation is not set; Jamm must be set as -javaagent
私もjavaOptionsを印刷しようとした-javaagent
オプションが設定されませんでした。
プラグインの中に-javaagent
javaOptionを追加すると、jammでタスクを実行できますか?
ありがとうございます!