読者です 読者をやめる 読者になる 読者になる

ゲンゾウ用ポストイット

Java、Groovy、Linux関連の備忘録

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

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を使おうとすると依存性が解決しきれなくて困った件 - 豆無日記)

ほいで実行。

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

ちゃんと参照できた!