GradleでGoogleCodeプロジェクトを作ってみる – その3

Gradle,Groovy

GradleにはMavenリポジトリ公開のためのプラグインが用意されている。

今現在のbuild.gradleが以下のようになっているはず。

build.gradle

usePlugin("groovy")
sourceCompatibility = 1.6
version = "0.1.0"
archivesBaseName = "gconv"
repositories {
flatDir(dirs: "$rootDir/lib")
mavenCentral()
}
dependencies {
groovy "org.codehaus.groovy:groovy:1.7.4"
testCompile "junit:junit:4.8.1"
}

これに以下の記述を追加する。

@@ -1,4 +1,5 @@
usePlugin("groovy")
+usePlugin("maven")
sourceCompatibility = 1.6
version = "0.1.0"
@@ -13,3 +14,16 @@
groovy "org.codehaus.groovy:groovy:1.7.4"
testCompile "junit:junit:4.8.1"
}
++uploadArchives {+	repositories{+		mavenDeployer {+			repository(url: "file://localhost/tmp/gconv/svn/maven_repository/")+			pom{+				version = "0.1.0"+				groupId = "com.gmail.genzouw"+				artifactId = "gconv"+			}+		}+	}+}

このあたりはMavenをまったく使ってこなかったためによく分からない。いろんなサイトからかき集めてきた。

Mavenリポジトリ公開リソースを作成

設定が終わったら、以下のコマンドを実行してみる。

$ gradle uploadArchives
$ cd /tmp/gconv/
$ tree
gconv
`-- svn
`-- maven_repository
`-- com
`-- gmail
`-- genzouw
`-- gconv
|-- 0.1.0
|   |-- gconv-0.1.0.jar
|   |-- gconv-0.1.0.jar.md5
|   |-- gconv-0.1.0.jar.sha1
|   |-- gconv-0.1.0.pom
|   |-- gconv-0.1.0.pom.md5
|   `-- gconv-0.1.0.pom.sha1
|-- maven-metadata.xml
|-- maven-metadata.xml.md5
`-- maven-metadata.xml.sha1

生成されたリソースを見ると、build.gradleの設定との関連がわかりやすい。
mavenDeployer要素については以下のとおり。

  • repository:生成リソースの出力先を設定する。
  • pom:公開するjarのバージョン、グループID、アーティファクトIDを指定。(Maven用語。勉強不足です…)

これをWebのどこかに公開すれば、Grapeから使用可能になるはず。手頃な場所が見つからなかったので、Google CodeのSubversionリポジトリにtrunkと同一階層にフォルダを作成し、そこに公開することにした。

$ mkdir-p /tmp/work
$ cd /tmp/work
$ svn co https://gconv.googlecode.com/svn svn --username genzouw
$ cd svn
$ mv /tmp/gconv/svn/maven_repository .
$ svn add maven_repository
$ svn commit -m"gconv 0.1.0 release."

Grapeにて利用してみる

以下のようなスクリプトを記述する。

encode.groovy

#!/usr/bin/env groovy
@GrabResolver(name="gconv", root="http://gconv.googlecode.com/svn/maven_repository")
@Grab("com.gmail.genzouw:gconv:0.1.0")
import com.gmail.genzouw.gconv.*
println Gconv.instance.guess(new File(args[0]).bytes )

GrabResolverを使用すると、Mavenリポジトリを追加できるようなので、この機能を利用。(GrapeでGparsを使おうとすると依存性が解決しきれなくて困った件 - 豆無日記)

ほいで実行。

$ chmod700 encode.Groovy
$ ./encode.groovy src/test/resources/txt/utf8.txt
UTF-8

ちゃんと参照できた!

Gradle,Groovy