最近、何かのドキュメント中にpom.xmlが出てくると一気に視界がぼやけることに気づきました
人間に優しいpomを書きましょう
ということでyamlでpomを書きたいと思います
使うのは poly-maven というmaven-pluginです
要 maven 3.3.1です
このプラグインはYAML以外にruby, clojure, groovyなどのDSLでもpomを記述できるようです
pom.yml化して運用する方法
1 お好みのmvnプロジェクトを用意する
既に存在するプロジェクトをpom.ymlで管理したいならそれを使えばいいですが、
なにもなければ
$ mvn archetype:generate
なり、なんなりで好きなmvnプロジェクトを用意しましょう
2 .mvn/extensions.xml を用意して以下の内容を記述する
プロジェクトのルートディレクトリに .mvn/extensions.xml
を用意し、
次の内容を記述してください。
<?xml version="1.0" encoding="UTF-8"?>
<extensions>
<extension>
<groupId>io.takari.polyglot</groupId>
<artifactId>polyglot-yaml</artifactId>
<version>0.1.13</version>
</extension>
</extensions>
今回はyamlでしたが artifactId
の値を polyglot-ruby とかにすると
pom.rb でpomを記述することになります
詳しくは次のリポジトリの例が参考になると思います
polyglot-maven-examples
3 pom.xml -> pom.yml
ここまでですでに mvn install
とか mvn test
はpom.ymlを参照するようになりました。
pom.xmlはgitignoreに追加して良いと思います
しかしpom.ymlを手で用意するのは面倒なので
既存のpom.xmlからpom.ymlを用意しましょう
$ mvn io.takari.polyglot:polyglot-translate-plugin:translate -Dinput=pom.xml -Doutput=pom.yml
これでOK! Happy Maven Life!
ちなみにyamlはこんな感じになります
やっぱり無駄な記述がない方がpomの設定内容を把握しやすいと個人的に感じます
modelVersion: 4.0.0
groupId: toprock
artifactId: toprock
version: 1.0-SNAPSHOT
packaging: jar
properties: {project.build.sourceEncoding: UTF-8}
dependencies:
- {artifactId: lombok, groupId: org.projectlombok, scope: provided, version: 1.16.4}
- {artifactId: junit, groupId: junit, scope: test, version: 4.11}
build:
plugins:
- groupId: org.apache.maven.plugins
artifactId: maven-compiler-plugin
version: 3.5
configuration: {source: 1.8, target: 1.8}
- groupId: org.apache.maven.plugins
artifactId: maven-surefire-plugin
version: 2.16
configuration: {enableAssertions: true}
modelEncoding: UTF-8
後日談というか今回のオチ
mvnコマンド実行時はpom.ymlが読まれるので問題ありませんが
IntelliJ IDEA以外のIDE等にpom情報を認識させるためには、
pom.yml更新後にpom.xmlを更新しなければなりません。
追記1
IntelliJ IDEA 2016.1 においてpom.yamlのみ(pom.xml無し)でプロジェクトのインポートに成功しました
追記2
プロジェクトimportはできたものの、import予めmvnコマンドで落としてきた依存パッケージが読み込めただけで、pomの更新後の追加パッケージの認識やIDE上でのmavenの操作はできませんでした。
といってもpom.yml更新後に手でxmlをいじる必要はありません。
さきほどの pom.xmlからpom.ymlを生成するコマンド
のファイル指定を適切に行えば
YAMLからXMLのpomを生成できるので
pom.yml更新後は以下のコマンドを実行しましょう
$ mvn io.takari.polyglot:polyglot-translate-plugin:translate -Dinput=pom.yml -Doutput=pom.xml
長いのでお使いのシェルの設定ファイルに
alias pom-yml-to-xml='mvn io.takari.polyglot:polyglot-translate-plugin:translate -Dinput=pom.yml -Doutput=pom.xml'
するか
#!/bin/sh
mvn io.takari.polyglot:polyglot-translate-plugin:translate -Dinput=pom.yml -Doutput=pom.xml
という実行可能なシェルスクリプトををプロジェクトのわかりやすいディレクトリに置いておけばよいと思います