LoginSignup
12
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-03-27

最近、何かのドキュメント中に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

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

12
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
6