Javaは作ったライブラリをどうやって配布するか悩みの種です。jarファイルを作って読み込むのもダサいし、
Maven Centralに登録するのもハードル高そうだし、どうせならそのままGitHubで公開したいです。
maven-pluginsを使えばGitHubに置いて公開できるっぽかったのでやってみました。
HomeBrewで入れてるmavenは3.3.9
$ mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T01:41:47+09:00)
Maven home: /usr/local/Cellar/maven/3.3.9/libexec
Java version: 1.8.0_73, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/jre
Default locale: ja_JP, platform encoding: UTF-8
OS name: "mac os x", version: "10.11.4", arch: "x86_64", family: "mac"
access tokenを作る
https://github.com/settings/tokens でdeployで使用するaccess tokenを作成します。
repoの権限にチェックが入っていれば大丈夫なはず
認証情報を設定
認証情報はコミットしたくないのでローカルで管理
$vim ~/.m2/settings.xml
<settings>
<servers>
<server>
<id>github</id>
<username>username@example.com</username>
<password>abcdefghijk(access tokenをいれる)</password>
</server>
</servers>
</settings>
passwordには普通にパスワード入れるって書いてあったけど、うまく動作しなかったのでさっき取得したaccess tokenを入れる
pom.xmlの設定
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>holiday-jp</groupId>
<artifactId>holiday-jp</artifactId>
<!-- バージョン番号 -->
<version>1.0</version>
<packaging>jar</packaging>
<name>holiday-jp</name>
<url>https://github.com/narikei/holiday-jp</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 認証情報読み込み -->
<github.global.server>github</github.global.server>
</properties>
<distributionManagement>
<repository>
<id>internal.repos</id>
<name>Temporary Staging Repository</name>
<url>file://${project.build.directory}/mvn-repo</url>
</repository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>com.github.github</groupId>
<artifactId>site-maven-plugin</artifactId>
<version>0.12</version>
<configuration>
<!-- Git コミットメッセージ -->
<message>Maven artifacts for ${project.version}</message>
<noJekyll>true</noJekyll>
<!-- distributionManagement の url と一致させる -->
<outputDirectory>${project.build.directory}/mvn-repo</outputDirectory>
<!-- リモートブランチ名 -->
<branch>refs/heads/mvn-repo</branch>
<includes><include>**/*</include></includes>
<!-- Github リポジトリ名 -->
<repositoryName>${repositoryName}</repositoryName>
<!-- Github リポジトリユーザー名 -->
<repositoryOwner>${ownerName}</repositoryOwner>
</configuration>
<executions>
<execution>
<goals>
<goal>site</goal>
</goals>
<phase>deploy</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
リポジトリ名、リポジトリユーザー名などを設定、versionは後で設定するtag名と合わせる必要があります。
この設定でmvn-repoブランチにアップロードされるようになります。
デプロイ実行
$ mvn clean deploy
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building holiday-jp 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
・
・
・
[INFO] Updating reference refs/heads/mvn-repo from a1d4648e3aa42b6cf247614fd38379ed0ae37a9d to c4cc9eee11adafa0f2de71eae88ee9c83f1647d1
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 38.698 s
[INFO] Finished at: 2016-05-12T12:25:24+09:00
[INFO] Final Memory: 20M/218M
[INFO] ------------------------------------------------------------------------
versionをタグ付け
pom.xmlで指定したversionを、デプロイのコミットにtag付します
$ git tag 1.0 c4cc9eee11adafa0f2de71eae88ee9c83f1647d1
$ git push origin 1.0
出来上がったのがこちらです
https://github.com/narikei/holiday-jp
https://github.com/narikei/holiday-jp/blob/master/pom.xml にmavenの設定が入っています
https://github.com/narikei/holiday-jp/tree/mvn-repo にデプロイされたファイルが入っています
使う側からライブラリを読み込むときは
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<repositories>
<repository>
<id>holiday-jp</id>
<url>https://raw.github.com/narikei/holiday-jp/mvn-repo/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>holiday-jp</groupId>
<artifactId>holiday-jp</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
urlをhttps://raw.github.com/${ownerName}/${repositoryName}/${branchName}/
という形式で読み込んでくれます
versionにはつけたtag名を入力します
おわり
npmとかRubyGemsとかに慣れきっててJava辛いけど、
適当なオレオレライブラリ作るにはこれで結構便利かも
参考
http://oinume.hatenablog.com/entry/wp/527
http://yo1000.hateblo.jp/entry/2015/03/18/030358