gmaven-plugin 1.3 の generateStubs に sourceEncoding を効かせるパッチを書いた
Maven の gmaven-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>