読者です 読者をやめる 読者になる 読者になる

EclipseとMavenのコンパイルの挙動の違い:Mavenは厳しい?

ログを見てると、原因はBinarySafeStreamTest.javaがcom.sun.org.apache.xerces.internal.impl.dv.util.Base64を使っていて、テスト実行時に警告が出てビルドが終わってしまうのかな。
ただ、EclipseJUnitを実行しても警告が出ずにテストは通るんだよなー。
Maven2.0.8のときでも出ていたし、何が原因やら。
Hudsonをビルドするときの問題 - cactusman日誌

これとはちょっと違うんだけど、ちょうど今日、mavenではエラー、EclipseではOKなのにという現象にあいました。

結局、それはアノテーション中の配列記法の末尾にカンマが付くか付かないかが原因でした。

たとえば

@interface Hoge {
    Foo[] value();
}

@interface Foo {
    String value();
}

@Hoge(value = { @Foo("A"), @Foo("B"), })
public class Sample {
}

というアノテーションとクラスがあったときに、@Foo("B")の後のカンマのところで、MavenはCompilation failureは吐いて止まってしまいます。

[INFO] Scanning for projects...
[INFO] ----------------------------------------------------------------------------
[INFO] Building for TopCoder
[INFO]    task-segment: [test]
[INFO] ----------------------------------------------------------------------------
[INFO] artifact org.apache.maven.plugins:maven-compiler-plugin: checking for updates from maven.seasar.org
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] snapshot delf:delf-commons:1.0-SNAPSHOT: checking for updates from maven.seasar.org
[INFO] [compiler:compile]
Compiling 1 source file to C:\Sample\target\classes
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure

C:\Sample\target\src\main\java\Sample.java:[9,38] 式の開始が不正です。


[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16 seconds
[INFO] Finished at: Sat May 03 01:36:10 JST 2008
[INFO] Final Memory: 5M/10M
[INFO] ------------------------------------------------------------------------


EclipseはぜんぜんOKなんですけどね。


Eclipesとかだと警告に対するユルさ設定ができますが、上記のような振る舞いに関する設定を探してみたけど見つかりませんでした。
なので、javacのデフォルトの挙動なんだろうと思ってたんですが、mavenにかかると非常に厳しくチェックされてしまいますね。


この前書いたメソッドジェネリクス構文と型推論によるキャストの限界 - 豆無日記もそうですが、やっぱりEclipseMavenではコンパイル時の挙動が違うように思えます。


なんででしょうね。


噂のmaven-compiler-pluginの設定でどうにかなるかと思ってみてみたんですが、それっぽい設定はなさそう。

compiler:compile

pom.xmlでfailOnErrorをfalseにしてみたけど、同じでした。
compilerArgumentsとかそういうところなのか?でも何指定したらいいかわからないし。


というわけで、いったん思考停止。