2017-01-18 3 views
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でタスクを実行できますか?

ありがとうございます!

答えて

0

明らかに、forkruntestタスクでのみ利用できます。自分のコードを追加して別のクラスにメジャーコードを移動しましたMemoryMeasure

関連する問題