ライブラリを簡単に使えるように
Maven Centralというところに登録すればライブラリの導入が簡単になるらしいということで、自作ライブラリを登録した。
- Maven
- プロジェクト管理ツール。ビルドもできるし、依存性も解決してくれるらしい。
環境
- Eclipse() : 4.2 Juno
- 通常のAndroidプロジェクトを作成。
- AndroudStudio版も調べます!てか今後は全部移行すべき。
- Eclipse ADT Plugin : 22.6
- Apache Maven : 3.1.1
Sonatypeアカウント作成
- Maven Centralにライブラリを登録するために必要。
- Sonatypeのリポジトリを通して公開する。
- https://issues.sonatype.org/
EclipseプロジェクトのMaven対応
- プラグインを入れてなければ入れる
- Maven Integration for Eclipse
- Configure -> Convert to Maven
- pom.xml が作成される(pom = Project Object Model)
- 作成時の項目は後から変更できる。
- GroupId
- com.github.sakebook
- ArtifactId
- DialogHelper
- Version
- 0.0.1
- Packaging
- jar
- Name
- DialogHelper
- Description
- Easy way to make dialog for everyone.
- pom.xml が作成される(pom = Project Object Model)
- 変更前の.classpath
- 変更後に追加される
...... ...
- 変更前の.project
DialogHelperSample com.android.ide.eclipse.adt.ResourceManagerBuilder com.android.ide.eclipse.adt.PreCompilerBuilder org.eclipse.jdt.core.javabuilder com.android.ide.eclipse.adt.ApkBuilder com.android.ide.eclipse.adt.AndroidNature org.eclipse.jdt.core.javanature
- 変更後に追加される
...... org.eclipse.m2e.core.maven2Builder ... org.eclipse.m2e.core.maven2Nature com.android.ide.eclipse.adt.AndroidNature org.eclipse.jdt.core.javanature
- 作成されるpom.xml
4.0.0 sample.convert.maven MavenConvertSample 0.0.1 MCS sample src maven-compiler-plugin 3.1
JREが、J2SE-1.5に変更されるので、プロジェクトデフォルトに戻す。
* BuildPath -> Configure Build Path -> Java Build Path -> Libraries -> JRE SystemLibrary -> Edit -> Workspace default library
pom.xmlの設定
- Mavenでビルドする際に必要な記述を追加していく。
また、Maven Centralに登録して皆が使えるようにするには、誰が作ったのか?どのようなライセンスなのか?なども記述しないといけない。先に完成系を張っておく。
4.0.0 org.sonatype.oss oss-parent 7 com.github.sakebook DialogHelper 0.0.1 jar DialogHelper Easy way to make dialog for everyone. https://github.com/sakebook/android-library-dialog-DialogHelper/ Apache License 2.0 http://www.apache.org/licenses/LICENSE-2.0 repo https://github.com/sakebook/android-library-dialog-DialogHelper scm:git:git://github.com/sakebook/android-library-dialog-DialogHelper.git scm:git:git://github.com/sakebook/android-library-dialog-DialogHelper.git sonatype-nexus-staging Nexus Staging Repository https://oss.sonatype.org/service/local/staging/deploy/maven2/ sakebook Shinya Sakemoto sakebook@gmail.com http://sakebook.blogspot.com/ developer GitHub https://github.com/sakebook/android-library-dialog-DialogHelper/issues UTF-8 UTF-8 UTF-8 UTF-8 4.1.1.4 16 r7 1.6 3.1.1 com.google.android android ${android.version} provided com.google.android annotations ${android.version} com.google.android support-v4 ${android.support.version} ${base.dir}src res org.apache.maven.plugins maven-compiler-plugin 3.1 ${java.version} ${java.version} true ${project.build.sourceEncoding} ${project.reporting.outputEncoding} com.jayway.maven.plugins.android.generation2 android-maven-plugin 3.8.2 ${project.basedir}/AndroidManifest.xml ${env.ANDROID_HOME} ${android.platform} true org.apache.maven.plugins maven-javadoc-plugin 2.9 ${project.build.directory} org.apache.maven.plugins maven-source-plugin package jar org.apache.maven.plugins maven-release-plugin 2.4 ${project.build.sourceEncoding} ${project.reporting.outputEncoding} forked-path true release-sign-artifacts performRelease true org.apache.maven.plugins maven-gpg-plugin 1.4 ${project.build.sourceEncoding} ${project.reporting.outputEncoding} sign-artifacts verify sign
- parent
- 親プロジェクト。sonatypeのレポジトリを利用するため。
- licenses
- プロジェクトのライセンス。
- scm
- プロジェクトのソースコード管理システムを記述。
- distributionManagement
- リモートリポジトリにでプロイするために必要な情報を記述。
- developers
*プロジェクトの開発者を記述。 貢献者がいる場合はcontributorsへ書く。 - issueManagement
- バグ管理システムを記述。
- properties
- 変数を定義。pluginで同様のプロパティ名を持つ場合、pomに記述した内容が用いられる。
- dependencyManagement
- 依存関係を定義。dependenciesのみで定義した場合との違いは、Managementで括ると、子pomに依存関係は、明示的に宣言しないといけない。その代わりバージョンは親pomのものが継承される。
- build
- buildに関する情報を定義。
- sourceDirectory
- ソースディレクトリを相対パスで定義。今回はEclipseのプロジェクトをConvertしたので、通常のMavenプロジェクトとは構成が異なる。
- resources
- リソースを定義。ソースと同様に、EclipseのプロジェクトをConvertしたので、通常のMavenプロジェクトとは構成が異なる。
- pluginManagement
- 依存関係を定義。dependenciesのみで定義した場合との違いは、Managementで括ると、子pomに依存関係は、明示的に宣言しないといけない。その代わりバージョンは親pomのものが継承される。
- plugins
- プラグインに関する情報を定義。
- profiles
- プロジェクトのプロファイルを定義。環境に依存する設定を記述。今回はperformReleaseビルド時のみmaven-gpg-pluginを利用するように。
- ローカルの設定やpasswordの設定は ~/.m2e/setting.xmlに記述。
sonatype-nexus-staging xxxxxxxxx xxxxxxxxx android-sdk xxxxxxxxxx/xxxxxxx android-sdk
issue作成
- 先ほど作成したSonatypeで、リポジトリを作成してもらうようにissueを作成します。
- 僕が作成したissueはこちらです。Group Idに問題があり、やりとりがありました汗
- 作ってもらったら、今度はライブラリをデプロイしたときにまたコメントしましょう。
pgp署名確認
- Maven Centralに登録するには、公開物に対して署名をしなければなりません。
- 未インストールの場合はこちらから。
鍵作成
- 聞かれる値はデフォルト値でOK
$ gpg --gen-key
- 作成された鍵の確認
$ gpg --list-keys
- 対象ファイルの署名
$ gpg -ab FILE
- 署名の確認
- sub鍵で署名されていないか確認
- 45yH63G3 の様な8文字が鍵のID
- pub(公開鍵) のIDと一致していればOK
- sub鍵で署名されていないか確認
$ gpg --verify FILE
- 公開鍵の配布
$ gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 45yH63G3
- 確認
- 45yH63G3 が帰ってくればOK
$ gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 45yH63G3
コマンドラインからビルド
プロジェクトのルートディレクトリで
$ mvm clean package
- ライブラリ本体のjarを作成
$ mvm deploy
- distributionManagementに記述したリポジトリにライブラリ本体とpom.xmlをデプロイ。
- デプロイしたら、次のURLからstagingリポジトリに上がったことを確認できます。
- https://oss.sonatype.org/#stagingRepositories
- ただ、まだリリースできません。署名したjarと、sourceファイルとjavadocも上げる必要があります。
$ mvm source:jar
- ソースファイルのjarを作成
$ mvm javadoc:jar
- javadocのjarを作成
$ mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=pom.xml -Dfile=target/DialogHelper-0.0.1.jar -Dgpg.passphrase=yourpassphrase
- jarを署名してリポジトリにアップロード
$ mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=pom.xml -Dfile=target/DialogHelper-0.0.1-javadoc.jar -Dclassifier=javadoc -Dgpg.passphrase=yourpassphrase
- javadocを署名してリポジトリにアップロード
$ mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=sonatype-nexus-staging -DpomFile=pom.xml -Dfile=target/DialogHelper-0.0.1-sources.jar -Dclassifier=sources -Dgpg.passphrase=yourpassphrase
- sourceを署名してリポジトリにアップロード
- ここまでくれば、Stagingにある自分のリポジトリをCloseして、しばらくすると、Releaseできます。
issue追記
- Releaseが完了したので、その旨をコメントに記入しましょう。
- 返事があり、その後しばらくすると、登録完了です!
使ってみる
- pom.xml
com.github.sakebook DialogHelper 0.0.1 jar
- build.gradle
compile 'com.github.sakebook:DialogHelper:0.0.1'
初めて上がったときは感動です!サンプルアプリや、CI済みなどがわかるとより使われやすくなると思います。皆さんも自作ライブラリを作り、職場や家でも簡単に使い回せるようにしましょう!
参考
#侍ズム / 【最新版】Maven Central Repository へのライブラリ登録方法 #maven@vvakameの日記 / JsonPullParser が Maven Central Repository に入るようです
ノウハウ共有サイト!Knowledge Enabling / appendix. mavenセントラルリポジトリに公開する
エルピーベ / MacOSXでGnuPGを使おう
SlideShare / Maven基礎
Unlimited Island / pom.xml
0 件のコメント:
コメントを投稿