Permalink
Browse files

blog sample: sbt groovy compile plugin

  • Loading branch information...
fits
fits committed Mar 4, 2012
1 parent 611bb90 commit b5c76f4ff3e76d0e113e78219b6f97e7a6029430
@@ -0,0 +1,16 @@
+
+import org.codehaus.groovy.control.CompilerConfiguration;
+import org.codehaus.groovy.tools.Compiler;
+
+class GroovySimpleCompiler {
+ public static void main(String[] args) {
+ CompilerConfiguration conf = new CompilerConfiguration();
+ //出力先ディレクトリを設定
+ conf.setTargetDirectory("dest");
+
+ Compiler compiler = new Compiler(conf);
+
+ //実行時引数で指定した Groovy スクリプトファイルをコンパイル
+ compiler.compile(args);
+ }
+}
@@ -0,0 +1,40 @@
+package fits.sample
+
+import sbt._
+import Keys._
+
+import org.codehaus.groovy.control.CompilerConfiguration
+import org.codehaus.groovy.tools.Compiler
+
+object GroovySamplePlugin extends Plugin {
+
+ val groovySourceDirectory = SettingKey[File]("groovy-source-directory")
+ val groovyOutputDirectory = SettingKey[File]("groovy-output-directory")
+ val groovySources = TaskKey[Seq[File]]("groovy-sources")
+ val groovyCompile = TaskKey[Unit]("groovy-compile", "Run Groovy compiler")
+
+ val groovySettings = Seq(
+ groovySourceDirectory <<= sourceDirectory(_ / "main" / "groovy"),
+ groovyOutputDirectory <<= crossTarget / "groovy",
+ groovySources <<= groovySourceDirectory map { dir =>
+ //Groovy スクリプトファイルのパスを取得
+ //(PathFinder の get で Seq[File] 取得)
+ (dir ** "*.groovy").get
+ },
+ groovyCompile <<= groovyCompileTask
+ )
+
+ def groovyCompileTask = (groovySources, groovyOutputDirectory, streams) map {
+ (src, destDir, s) => {
+
+ val conf = new CompilerConfiguration()
+ conf.setTargetDirectory(destDir)
+
+ val compiler = new Compiler(conf)
+
+ s.log.info("src : " + src)
+
+ compiler.compile(src.toArray)
+ }
+ }
+}
@@ -0,0 +1,7 @@
+sbtPlugin := true
+
+name := "sbt-groovy-sample-plugin"
+
+organization := "fits"
+
+libraryDependencies += "org.codehaus.groovy" % "groovy-all" % "1.8.6"
@@ -0,0 +1,14 @@
+import Keys._
+
+name := "sbt-groovy-sample-test"
+
+organization := "fits"
+
+//プラグインのキーを有効化
+seq(fits.sample.GroovySamplePlugin.groovySettings: _*)
+
+//コンパイル時に Groovy ソースをコンパイルするための設定
+compile <<= (compile in Compile) dependsOn fits.sample.GroovySamplePlugin.groovyCompile
+
+//コンパイルした Groovy クラスを JAR ファイルに追加するための設定
+unmanagedResourceDirectories in Compile <+= fits.sample.GroovySamplePlugin.groovyOutputDirectory
@@ -0,0 +1,2 @@
+
+addSbtPlugin("fits" % "sbt-groovy-sample-plugin" % "0.1-SNAPSHOT")
@@ -0,0 +1,5 @@
+package fits.sample
+
+(1..5).each {
+ println "count : ${it}"
+}

0 comments on commit b5c76f4

Please sign in to comment.