gmaven-plugin 1.3 の generateStubs に sourceEncoding を効かせるパッチを書いた

Mavengmaven-plugin 1.3 で providerSelection に 1.7 を指定している場合、マルチバイト文字列のあるGroovyファイルで generateStubs ゴールが失敗する問題がある。GMaven の JIRA には GMAVEN-85 で上がってるのでそのうち直りそうだけど、とりあえず版でパッチを書いた。
https://svn.codehaus.org/gmaven/trunk から全部チェックアウトして、パッチ当てて、mvn install で使えるようになるはず。

Index: gmaven-plugin/src/main/java/org/codehaus/gmaven/plugin/stubgen/AbstractGenerateStubsMojo.java
===================================================================
--- gmaven-plugin/src/main/java/org/codehaus/gmaven/plugin/stubgen/AbstractGenerateStubsMojo.java	(リビジョン 123)
+++ gmaven-plugin/src/main/java/org/codehaus/gmaven/plugin/stubgen/AbstractGenerateStubsMojo.java	(作業コピー)
@@ -22,7 +22,9 @@
 import org.apache.maven.shared.io.scan.mapping.SuffixMapping;
 import org.apache.maven.shared.model.fileset.FileSet;
 import org.codehaus.gmaven.feature.Component;
+import org.codehaus.gmaven.feature.Configuration;
 import org.codehaus.gmaven.plugin.CompilerMojoSupport;
+import org.codehaus.gmaven.runtime.ClassCompiler;
 import org.codehaus.gmaven.runtime.StubCompiler;
 
 import java.io.File;
@@ -51,11 +53,21 @@
  */
 public abstract class AbstractGenerateStubsMojo
     extends CompilerMojoSupport
+    implements ClassCompiler.Keys
 {
     protected AbstractGenerateStubsMojo() {
         super(StubCompiler.KEY);
     }
     
+    /**
+     * Sets the encoding to be used when reading source files.
+     *
+     * @parameter expression="${sourceEncoding}" default-value="${project.build.sourceEncoding}"
+     *
+     * @noinspection UnusedDeclaration
+     */
+    private String sourceEncoding;
+
     public void execute() throws MojoExecutionException, MojoFailureException {
         super.execute();
 
@@ -128,6 +140,11 @@
         // TODO: Bridge mojo config to component config
         //
 
+        Configuration config = component.config();
+
+        if (sourceEncoding != null) {
+        	config.set(SOURCE_ENCODING, sourceEncoding);
+        }
         compile(compiler, sources != null ? sources : getDefaultSources());
     }
 
Index: gmaven-runtime/gmaven-runtime-1.7/src/main/java/org/codehaus/gmaven/runtime/v1_7/StubCompilerFeature.java
===================================================================
--- gmaven-runtime/gmaven-runtime-1.7/src/main/java/org/codehaus/gmaven/runtime/v1_7/StubCompilerFeature.java	(リビジョン 123)
+++ gmaven-runtime/gmaven-runtime-1.7/src/main/java/org/codehaus/gmaven/runtime/v1_7/StubCompilerFeature.java	(作業コピー)
@@ -19,6 +19,7 @@
 import groovy.lang.GroovyClassLoader;
 import org.codehaus.gmaven.feature.Component;
 import org.codehaus.gmaven.feature.support.FeatureSupport;
+import org.codehaus.gmaven.runtime.ClassCompiler;
 import org.codehaus.gmaven.runtime.StubCompiler;
 import org.codehaus.gmaven.runtime.support.CompilerSupport;
 import org.codehaus.groovy.control.CompilerConfiguration;
@@ -74,6 +75,7 @@
             Map<String,Object> options = new HashMap<String,Object>();
             options.put("stubDir", getTargetDirectory());
             cc.setJointCompilationOptions(options);
+            cc.setSourceEncoding((String) config().get(ClassCompiler.Keys.SOURCE_ENCODING));
             ClassLoader parent = ClassLoader.getSystemClassLoader();
 
             GroovyClassLoader gcl = new GroovyClassLoader(parent, cc);

利用する場合のPOMはこんな感じで。

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.gmaven</groupId>
      <artifactId>gmaven-plugin</artifactId>
      <version>1.4-SNAPSHOT</version>
      <configuration>
        <providerSelection>1.7</providerSelection>
        <sourceEncoding>UTF-8</sourceEncoding>
      </configuration>
      <executions>
        <execution>
          <goals>
            <goal>generateStubs</goal>
            <goal>compile</goal>
            <goal>generateTestStubs</goal>
            <goal>testCompile</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
</build>