SlideShare a Scribd company logo
これであなたもOSS開発者!
Mavenセントラルリポジトリに
自作ライブラリをUPするときの
いろんなコツの話	
@nabedge = 渡辺 祐 http://mixer2.org/
2014/2/15 2014/4/5 第5回 #渋谷java
CM	
2
Mixer2というライブラリを作ってる者です	
http://mixer2.org	
JavaでWebアプリを作るための
テンプレートエンジン	
3
CMおわり	
4
今日のおはなし	
•  Mixer2というテンプレートエンジンって
すごい便利なんだぜ
•  例えばMixer2みたいなJavaライブラリ
(本体は *.jar ファイル一つ)を
Mavenセントラルリポジトリに登録する
にはどんなふうにしたらいいの?
5
つまりこんなふうに	
6
http://repo1.maven.org/maven2/org/mixer2/mixer2/1.2.22
論より証拠!	
いまこの場で、
Mixer2-1.2.xxの
mavenセントラルリポジトリへの
リリース作業を開始します。
7
デモ
さっきのデモみたいな流れに至るまでのコツ	
•  pom.xmlを調整する
•  <groupId>, <artifactId>,親pomの指定
•  GPG鍵とmaven-gpg-plugin
•  *.md5/*.sha1チェックサムはmaven-install-plugin
•  maven-sources-plugin, maven-javadoc-plugin
•  アップロード権限をもらうための申請
•  Mixer2の場合はどうだった?
•  ビルドとリリースに関する3つのポイント
•  仮想OS + Jenkinsを使う
•  maven-release-pluginのことを忘れる
•  細かいバージョン番号を自分で決めない
8
今日の話は
ここだけ	
各自ググる
あるいは mixer2
のpomを参考に。
•  pom.xmlを調整する
•  <groupId>, <artifactId>,親pomの指定
•  GPG鍵とmaven-gpg-plugin
•  *.md5, *.sha1 チェックサムはmaven-install-plugin
•  maven-souces-plugin, maven-javadoc-plugin
•  アップロード権限をもらうための申請
•  Mixer2の場合はどうだった?
•  ビルドとリリースに関する3つのポイント
•  仮想OS + Jenkinsを使う
•  maven-release-pluginのことを忘れる
•  細かいバージョン番号を自分で決めない
9
アップロード権限をもらう	
1.  大きなプロジェクトでは自前のリポジトリサーバをセントラル
リポジトリサーバが直接rsyncしてくれる。
例: Apache Commons Project
例: Spring Framework Project
2.  小さいプロジェクトの場合は http://oss.sonatype.org に直
接アップする。
1.  申請すれば<groupId>ごとにアップロード権限をくれる。
例: アカウント”nabedge”は<groupId>org.mxier2</
groupId>の配下ならどんなartifactでも登録可能
2.  とりあえず本家の解説を一生懸命読みましょう。
https://docs.sonatype.org/display/Repository/Sonatype
+OSS+Maven+Repository+Usage+Guide
10
Mixer2の場合はどうだった?	
1.  mixer2.org というドメイン名を取得
2.  http://mixer2.org/ にあらかじめmaven siteで作ったページ
を用意。もちろん<groupId>はorg.mixer2
3.  自分のメールアドレスでgpg鍵つくって鍵サーバに登録
4.  pom.xmlを調整
5.  mvn deploy するとステージングリポジトリにUPされる
6.  3で使ったメールアドレスでSonatypeのJIRAにアカウント登
録&チケットを作成。
7.  すんなりリポジトリへのアクセス権をくれた。
8.  NEXUSにJIRAアカウントでログインし、ステージング状態
のartifactをリリースするとセントラルリポジトリへ反映される
※以降のリリースでは5と8の作業だけでよい。	
11
•  pom.xmlを調整する
•  <groupId>, <artifactId>,親pomの指定
•  GPG鍵とmaven-gpg-plugin
•  *.md5, *.sha1 チェックサムはmaven-install-plugin
•  maven-souces-plugin, maven-javadoc-plugin
•  アップロード権限をもらうための申請
•  Mixer2の場合はどうだった?
•  ビルドとリリースに関する3つのポイント
•  仮想OS + Jenkinsを使う
•  maven-release-pluginのことを忘れる
•  細かいバージョン番号を自分で決めない
12
なぜ仮想OS + Jenkinsでやるのか	
1.  ビルド&リリースに使うコマンドやその実行手順を間違えない	
2.  ビルドした記録と成果物を保存しやすい	
3.  異なるJDK/JREでのmvn testを実行しやすい	
•  mixer2はJRE同梱のJAXB実装に依存している。
Java6とJava7とでJAXB実装のバージョンが微妙に異なる。
•  なので、Java7でのmvn testもいつでもやれるようになってる。	
4.  確実に環境を一定に保てる	
5.  バックアップしやすい	
•  「ソースはgithubに入ってるから大丈夫」では甘い。	
•  JDK/JRE環境、gpg署名用の秘密鍵、ビルドジョブの設定(≒ビルド
とリリースの手順そのもの)、過去の成果物、etcetc…
•  ↑うっかり失うと再構築が面倒くさいという意味でダメージ大
•  仮想OSのイメージファイルで丸ごとバックアップしてしまえ!	
13
•  pom.xmlを調整する
•  <groupId>, <artifactId>,親pomの指定
•  GPG鍵とmaven-gpg-plugin
•  *.md5, *.sha1 チェックサムはmaven-install-plugin
•  maven-souces-plugin, maven-javadoc-plugin
•  アップロード権限をもらうための申請
•  Mixer2の場合はどうだった?
•  ビルドとリリースに関する3つのポイント
•  仮想OS + Jenkinsを使う
•  maven-release-pluginのことを忘れる
•  細かいバージョン番号を自分で決めない
14
maven-release-pluginのことを忘れる	
1.  mvn release:prepare release:perform のように簡単
なコマンド一発にできるが、pom.xmlがややこしくなり
がち。	
2.  どうせjenkinsを使うのだから、pom.xmlにややこしい設
定を書く代わりにビルドジョブ上にUNIXコマンドを書く
ようにするほうがわかりやすい&メンテしやすい。	
3.  「maven-release-pluginは、-SNAPSHOTなversion指
定が自分自身や依存先に指定されていないかまで
チェックしてくれるんだぜ!」	
→そういうのも最近はセントラルリポジトリ(のステージ
ング環境)にUPする段階で自動チェックしてくれるから
必ずしも自分でやらなくてもいい。	
15
•  「maven-release-pluginを使うな」
とは言ってません。
•  人間、慣れている方法が一番!	
16
•  pom.xmlを調整する
•  <groupId>, <artifactId>,親pomの指定
•  GPG鍵とmaven-gpg-plugin
•  *.md5, *.sha1 チェックサムはmaven-install-plugin
•  maven-souces-plugin, maven-javadoc-plugin
•  アップロード権限をもらうための申請
•  Mixer2の場合はどうだった?
•  ビルドとリリースに関する3つのポイント
•  仮想OS + Jenkinsを使う
•  maven-release-pluginのことを忘れる
•  細かいバージョン番号を自分で決めない
17
よくあるバージョン番号の考え方	
trunk/1.0.0-SNAPSHOT
    ↓     リリース→ tags/1.0.0
trunk/1.0.1-SNAPSHOT
    ↓     リリース→ tags/1.0.1
trunk/1.0.2-SNAPSHOT
•  リリースタグを切るときに<version>を書き換える。
(これは当然)	
•  trunk側も<version>を書き変える必要あるの?	
18
バージョン番号の固定観念を捨ててみる	
「trunk(開発の本線)のpom.xmlはずっと
<version>1.0-SNAPSHOT</version>
のまま」
というルールにしてしまう!
	
1.  それで開発してて、意外と困らない。	
2.  trunk配下のpom.xmlの<version>を
リリースのたびに書き換える面倒は無くなる
3.  リリースのときに<version>1.2.3</version>に書
き換えてtagを切るのはセオリーどおりで。
19
細かいバージョン番号を自分で決めない	
versions-maven-pluginでpom.xmlの
<version>1.2-SNAPSHOT</version>を
<version>1.2.3</version>
に自動書き換え。	
20
mvn versions:set –DnewVersion=1.2.${BUILD_NUMBER}
${BUILD_NUMBER} ??	
21
${BUILD_NUMBER}	
version 1.2.22の
ビルド履歴ココ
ビルド失敗=バージョン番号が飛ぶ=気にしない	
version 1.2.22 の
次のリリースが
1.2.30 だと
何か困ることが
あるか?
たぶん無い。
22
欠番	
欠番	
実際リリース
したバージョン
<version>を整えたらあとはデプロイ	
23
mvn clean deploy
-Dgpg.keyname=[自分のgpg鍵id]
-Dgpg.passphrase=[gpg鍵のパスフレーズ]
全体の流れ	
24
mvn versions:set
–DnewVersion=1.2.${BUILD_NUMBER} 	
mvn clean deploy
-Dgpg.keyname=[自分のgpg鍵id]
-Dgpg.passphrase=gpg鍵のパスフレーズ 	
Git/Subversionにタグを切る
※タイミングは最後じゃないほうがいいかも。
※下のコマンドはマネしないで!
git commitせずにgit tagしてる(いい加減すぎw)
おまけ:パスワードはマスク	
25
Jenkins Maskpasswords Plugin
おしまい	
ご清聴ありがとうございました!	
26

More Related Content

What's hot (20)

PDF
chat bot framework for Java8
masahitojp
 
PPTX
Jenkins+Maven活用術
cynipe cynipe
 
PDF
テンプレートエンジンにMixer2を使うとSeleniumでのテストもラクになるかもねという話
Y Watanabe
 
PDF
Vagrantと網元で開発環境を作ってみよう
Takuma Morikawa
 
PDF
【Camphor ×サイボウズ】selenium勉強会
Yuki Okada
 
PDF
Cpi mega mix
Ryuji Egashira
 
ODP
今流行りのウェブアプリ開発環境Yeoman
tomo_masakura
 
PDF
laravel x モバイルアプリ
Masaki Oshikawa
 
PDF
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点
Jun-ichi Sakamoto
 
PDF
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
 
PDF
Mojolicious::Liteを使ってみよう
charsbar
 
PDF
Mojoliciousでつくる! Webアプリ入門
Yusuke Wada
 
KEY
capybara で快適なテスト生活を
Ryunosuke SATO
 
PDF
フレームワークを使うべき 3 つの理由
Kenichi Mukai
 
PDF
SEOとJava Script。 〜文書構造とチームと、時々、闇〜
Yuki Minakawa
 
PDF
脱・独自改造! GebでWebDriverをもっとシンプルに
Hiroko Tamagawa
 
PDF
Mojolicious+redisでチャットを作った
Tetsuya Tatsumi
 
PDF
Gradleどうでしょう
Takuma Watabiki
 
PDF
Gradle布教活動
Nemoto Yusuke
 
PPTX
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
Koichi Sakata
 
chat bot framework for Java8
masahitojp
 
Jenkins+Maven活用術
cynipe cynipe
 
テンプレートエンジンにMixer2を使うとSeleniumでのテストもラクになるかもねという話
Y Watanabe
 
Vagrantと網元で開発環境を作ってみよう
Takuma Morikawa
 
【Camphor ×サイボウズ】selenium勉強会
Yuki Okada
 
Cpi mega mix
Ryuji Egashira
 
今流行りのウェブアプリ開発環境Yeoman
tomo_masakura
 
laravel x モバイルアプリ
Masaki Oshikawa
 
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点
Jun-ichi Sakamoto
 
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
 
Mojolicious::Liteを使ってみよう
charsbar
 
Mojoliciousでつくる! Webアプリ入門
Yusuke Wada
 
capybara で快適なテスト生活を
Ryunosuke SATO
 
フレームワークを使うべき 3 つの理由
Kenichi Mukai
 
SEOとJava Script。 〜文書構造とチームと、時々、闇〜
Yuki Minakawa
 
脱・独自改造! GebでWebDriverをもっとシンプルに
Hiroko Tamagawa
 
Mojolicious+redisでチャットを作った
Tetsuya Tatsumi
 
Gradleどうでしょう
Takuma Watabiki
 
Gradle布教活動
Nemoto Yusuke
 
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
Koichi Sakata
 

Similar to 20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java (20)

ODP
VC6によるRuby拡張ライブラリ開発環境について
goritto
 
PPTX
Pythonユーザのための構成管理入門 #pyconapac
Takeshi Komiya
 
PDF
Sflt17 meteorではじめる最速ウェブアプリ開発
Hironao Sekine
 
PPTX
3分間 開発環境クッキング 2012.07 #pyfes
Takeshi Komiya
 
PDF
Harmoware-VIS Tutorial
Nobuo Kawaguchi
 
PDF
OpenShift のある生活
Yoshimasa Tanabe
 
PDF
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
Yoshiharu Hashimoto
 
PDF
さくらのクラウドフォーメーション with Chef [XEgg session]
Yukihiko SAWANOBORI
 
PDF
DebianとWordPressでハッピーになろう!
Jun Nogata
 
PDF
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
Yukihiko SAWANOBORI
 
PDF
Vagrant & Dockerによるイマドキの開発環境構築
Nakazawa Yuichi
 
PPT
Devsumi2008
Agata Toshikata
 
PDF
自分色のLinuxホームサーバーを作ってみよう
Masahiko Hashimoto
 
PDF
自宅で出来る!ゲームサーバの作り方
光晶 上原
 
PPTX
How to deploy & operate OpenStack Production
VirtualTech Japan Inc.
 
PDF
DockerでWordPressサイトを開発してみよう
mookjp
 
PDF
Swiftで外部ライブラリを使ってみよう
Kanako Kobayashi
 
PDF
割と新し目の Open shift origin で作る自宅 paas 作成記
Hara Yoshihiko
 
PDF
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
Masashi Shinbara
 
PDF
Hello Java
Chihiro Ito
 
VC6によるRuby拡張ライブラリ開発環境について
goritto
 
Pythonユーザのための構成管理入門 #pyconapac
Takeshi Komiya
 
Sflt17 meteorではじめる最速ウェブアプリ開発
Hironao Sekine
 
3分間 開発環境クッキング 2012.07 #pyfes
Takeshi Komiya
 
Harmoware-VIS Tutorial
Nobuo Kawaguchi
 
OpenShift のある生活
Yoshimasa Tanabe
 
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
Yoshiharu Hashimoto
 
さくらのクラウドフォーメーション with Chef [XEgg session]
Yukihiko SAWANOBORI
 
DebianとWordPressでハッピーになろう!
Jun Nogata
 
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
Yukihiko SAWANOBORI
 
Vagrant & Dockerによるイマドキの開発環境構築
Nakazawa Yuichi
 
Devsumi2008
Agata Toshikata
 
自分色のLinuxホームサーバーを作ってみよう
Masahiko Hashimoto
 
自宅で出来る!ゲームサーバの作り方
光晶 上原
 
How to deploy & operate OpenStack Production
VirtualTech Japan Inc.
 
DockerでWordPressサイトを開発してみよう
mookjp
 
Swiftで外部ライブラリを使ってみよう
Kanako Kobayashi
 
割と新し目の Open shift origin で作る自宅 paas 作成記
Hara Yoshihiko
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
Masashi Shinbara
 
Hello Java
Chihiro Ito
 
Ad

More from Y Watanabe (16)

PDF
クラウド時代だからSpring-Retryフレームワーク
Y Watanabe
 
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
 
PDF
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
Y Watanabe
 
PDF
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
Y Watanabe
 
PDF
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
Y Watanabe
 
PDF
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Y Watanabe
 
PDF
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
Y Watanabe
 
PDF
俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略
Y Watanabe
 
PDF
properties, yaml, and me
Y Watanabe
 
PDF
テストゼロからイチに進むための戦略と戦術
Y Watanabe
 
PDF
The cost of learning - advantage of mixer2
Y Watanabe
 
PDF
渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと
Y Watanabe
 
PDF
Javaでやってみる The Twelve Factor App JJUG-CCC 2014 Fall 講演資料
Y Watanabe
 
PDF
Seleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトーク
Y Watanabe
 
PDF
Mixer2によるdynamic css sprite 201309第三回渋谷java
Y Watanabe
 
PDF
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
Y Watanabe
 
クラウド時代だからSpring-Retryフレームワーク
Y Watanabe
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
 
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
Y Watanabe
 
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
Y Watanabe
 
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
Y Watanabe
 
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Y Watanabe
 
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
Y Watanabe
 
俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略
Y Watanabe
 
properties, yaml, and me
Y Watanabe
 
テストゼロからイチに進むための戦略と戦術
Y Watanabe
 
The cost of learning - advantage of mixer2
Y Watanabe
 
渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと
Y Watanabe
 
Javaでやってみる The Twelve Factor App JJUG-CCC 2014 Fall 講演資料
Y Watanabe
 
Seleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトーク
Y Watanabe
 
Mixer2によるdynamic css sprite 201309第三回渋谷java
Y Watanabe
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
Y Watanabe
 
Ad

Recently uploaded (8)

PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
PPTX
Devcontainerのススメ(1)-Devcontainerとはどういう技術?-
iPride Co., Ltd.
 
PDF
【AI論文解説】 RLHF不要なLLMの強化学習手法: Direct Preference Optimization(+α)
Sony - Neural Network Libraries
 
PDF
20250711JIMUC総会_先進IT運用管理分科会Connpass公開資料.pdf
ChikakoInami1
 
PDF
Google Driveハブ型Obsidian同期環境:PC編集とモバイル閲覧を安全・効率的に実現するクロスデバイス構築ガイド
honeshabri
 
PDF
20250711JIMUC総会IBM Automation_Platform最新情報_Connpass公開版.pdf
ChikakoInami1
 
PDF
20250717_Devin×GitHubCopilotで10人分の仕事は出来るのか?.pdf
Masaki Yamakawa
 
PDF
論文紹介:OVO-Bench: How Far is Your Video-LLMs from Real-World Online Video​ Unde...
Toru Tamaki
 
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
Devcontainerのススメ(1)-Devcontainerとはどういう技術?-
iPride Co., Ltd.
 
【AI論文解説】 RLHF不要なLLMの強化学習手法: Direct Preference Optimization(+α)
Sony - Neural Network Libraries
 
20250711JIMUC総会_先進IT運用管理分科会Connpass公開資料.pdf
ChikakoInami1
 
Google Driveハブ型Obsidian同期環境:PC編集とモバイル閲覧を安全・効率的に実現するクロスデバイス構築ガイド
honeshabri
 
20250711JIMUC総会IBM Automation_Platform最新情報_Connpass公開版.pdf
ChikakoInami1
 
20250717_Devin×GitHubCopilotで10人分の仕事は出来るのか?.pdf
Masaki Yamakawa
 
論文紹介:OVO-Bench: How Far is Your Video-LLMs from Real-World Online Video​ Unde...
Toru Tamaki
 

20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java