紹介するのはこれ
依存はこれだけ
libraryDependencies ++= Seq( "com.github.scopt" %% "scopt" % "3.6.0" )
で、引数を格納するクラスをこんな風に用意して
import java.io.File case class Config(javaDocXml: File, junitResultDir: File)
パース設定とかを用意する。
import java.io.File import scopt.OptionParser object ArgParser { val parser = new OptionParser[Config]("UTXmlConverter") { head("ut_converter", "1.0-SNAPSHOT") arg[File]("[JavaDoc XML path]") .required() .text("Path for XML file that using MarkusBernhardt/xml-doclet.") .action((f, c) => c.copy(javaDocXml = f)) .validate(v => { if (!v.isFile) Left("Not a file.") else if (!v.getAbsolutePath.endsWith(".xml")) Left("Not a XML file.") else Right() }) arg[File]("[UT XML dir path]") .required() .text("Path for unit test results directory path.") .action((f, c) => c.copy(junitResultDir = f)) .validate(v => if (v.isDirectory) Right() else Left("Not directory.")) help("help").text("print this usage text.") note( "This program requires XMLs that generated by MarkusBernhardt/xml-doclet (var 1.0.5)\n" + " and Junit test results XML files." ) } def parse(args: Array[String]): Option[Config] = { parser .parse(args, Config(new File("docs.xml"), new File("ut_results"))) } }
そして、引数指定しないで実行すると…
Error: Missing argument [JavaDoc XML path] Error: Missing argument [UT XML dir path] Try --help for more information.
おーいいね。
help 読んでみても…
$ java -jar ut_converter.jar --help ut_converter 1.0-SNAPSHOT Usage: UTXmlConverter [options] [JavaDoc XML path] [UT XML dir path] [JavaDoc XML path] Path for XML file that using MarkusBernhardt/xml-doclet. [UT XML dir path] Path for unit test results directory path. --help print this usage text. This program requires XMLs that generated by MarkusBernhardt/xml-doclet (var 1.0.5) and Junit test results XML files.
オプション引数や、引数バリデーションも書けるし、なかなかいいですね。