倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

GMaven プラグインを作ろう! (2) : GMaven プラグイン・プロジェクトの pom.xml

今回は GMaven プラグイン・プロジェクト(Groovy による Maven2 プラグインを開発するプロジェクト)の pom.xml を見ていきます(一覧)。

まずその前に、お詫びと訂正を。 別に拙者が悪いわけではないんですけど。 前回見た GMaven プラグイン・プロジェクトの生成方法ですが、「対話的にプロジェクトを生成する」方法でも「パラメータを指定してプロジェクトを生成する」方法でも、生成された pom.xml そのままではうまく動かないようです。 正確には、install はできますが、実際に他のプロジェクトでそのプラグインを使おうとすると例外が投げられるといった具合です*1

また、「Groovy 1.7 を使用する方法」を後日書くと言っていましたが、ちょっとした修正程度では使用できるようにならなさそうなので Groovy 1.7の使用は諦めます*2

総じて「GMaven で Maven2 プラグインを開発している人間は、世界中に1人もいない」という結論に達しました(^ ^;) 書く気力がゴッソリなくなりましたが、あれこれ試行&錯誤したのを無駄にするのもそれはそれで哀しいので、とりあえず動いたサンプルだけでも書いておきます。

Groovy 1.6 + GMaven 1.2


Groovy 1.7 の使用は諦めたので、Groovy 1.6 を使用します。

また、各プロジェクトで設定する必要のある値 (groupId, artifactId, version) には、以下の値を使用します:

パラメータ名
groupId org.sample
artifactId meven-hello-plugin
version 1.0

これらを踏まえて、GMaven プラグイン・プロジェクトの pom.xml は以下のようになります:

<?xml version="1.0" encoding="UTF-8"?>
<project
        xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>org.sample</groupId>
    <artifactId>maven-hello-plugin</artifactId>
    <version>1.0</version>
    <packaging>maven-plugin</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.codehaus.gmaven</groupId>
            <artifactId>gmaven-mojo</artifactId>
            <version>1.2</version>

            <exclusions>
                <exclusion>
                    <groupId>org.codehaus.gmaven.runtime</groupId>
                    <artifactId>gmaven-runtime-1.5</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.codehaus.gmaven.runtime</groupId>
            <artifactId>gmaven-runtime-1.6</artifactId>
            <version>1.2</version>
        </dependency>
        
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <defaultGoal>install</defaultGoal>
        <plugins>
            <plugin>
                <groupId>org.codehaus.gmaven</groupId>
                <artifactId>gmaven-plugin</artifactId>
                <version>1.2</version>

                <executions>
                    <execution>
                        <goals>
                            <goal>generateStubs</goal>
                            <goal>compile</goal>
                            <goal>generateTestStubs</goal>
                            <goal>testCompile</goal>
                        </goals>

                        <configuration>
                            <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding>
                            <providerSelection>1.6</providerSelection>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
  • <packaging>maven-plugin<packaging>」の設定は大切。 忘れないように。
  • ソースコードのエンコーディングは UTF-8 に設定しています。 変更したい場合は「project/properties/source.encoding」要素のテキストを変更してください。
  • 使用される Groovy のバージョンは1.6.5です。

Groovyイン・アクション

Groovyイン・アクション


Programming Groovy: Dynamic Productivity for the Java Developer (The Pragmatic Programmers)

Programming Groovy: Dynamic Productivity for the Java Developer (The Pragmatic Programmers)

*1:org.codehaus.groovy.runtime.callsite.CallSite が見つからない」と言ったメッセージが出てくるので、適切な依存性を付加すれば動きそうなんですが・・・何故か上手く動かない。

*2:誰かが「設定方法の確立」もしくは「プラグインのバグの修正」をしてくれることを祈って、一応原因を書いておきます。 原因は GroovyMojo の実装クラスからその Java スタブコードを生成する際に(つまり generateStubs ゴールの実行時に) JavaDoc が除去されてしまうことです。 その結果、@goal (や @parameter)が設定されていないとみなされます。 別途 Java アノテーションで設定できるようになっているとかいうこともなさそうです