Java
Maven
maven-plugin

polyglot-mavenを使ってyamlでpomを記述する方法

More than 1 year has passed since last update.

最近、何かのドキュメント中に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を用意しましょう


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

という実行可能なシェルスクリプトををプロジェクトのわかりやすいディレクトリに置いておけばよいと思います