sbtで実行可能jarを作る
実行可能jarって言い方なんかださいな。
いいもんみっけたのでメモがわりに貼っときます。
404 Not Found
project/build/AssemblyProject.scala
import sbt._ trait AssemblyProject extends BasicScalaProject { def assemblyExclude(base: PathFinder) = base / "META-INF" ** "*" def assemblyOutputPath = outputPath / assemblyJarName def assemblyJarName = artifactID + "-assembly-" + version + ".jar" def assemblyTemporaryPath = outputPath / "assembly-libs" def assemblyClasspath = runClasspath def assemblyExtraJars = mainDependencies.scalaJars def assemblyPaths(tempDir: Path, classpath: PathFinder, extraJars: PathFinder, exclude: PathFinder => PathFinder) = { val (libs, directories) = classpath.get.toList.partition(ClasspathUtilities.isArchive) for(jar <- extraJars.get ++ libs) FileUtilities.unzip(jar, tempDir, log).left.foreach(error) val base = (Path.lazyPathFinder(tempDir :: directories) ##) (descendents(base, "*") --- exclude(base)).get } lazy val assembly = assemblyTask(assemblyTemporaryPath, assemblyClasspath, assemblyExtraJars, assemblyExclude) dependsOn(compile) def assemblyTask(tempDir: Path, classpath: PathFinder, extraJars: PathFinder, exclude: PathFinder => PathFinder) = packageTask(Path.lazyPathFinder(assemblyPaths(tempDir, classpath, extraJars, exclude)), assemblyOutputPath, packageOptions) }
使いかた
sbtのProject定義クラスにwithする + mainクラスを教えてあげる
class HogeProject(info: ProjectInfo) extends DefaultProject(info) with AssemblyProject { override def mainClass = Some("RunMe") }
あとは
>reload >compile >assembly
これだけ。