5

Serializableクラスで serialVersionUID を宣言するのを忘れたときに、Maven ビルドが失敗するようにしたいと考えています。を使えばjavac簡単です:

$ javac -Xlint:serial -Werror Source.java

それをMavenに直接翻訳してもうまくいきません:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>
            <configuration>
                <compilerArgument>-Xlint:serial -Werror</compilerArgument>
            </configuration>
        </plugin>

compilerArgument引用符で囲まれているため、個別の引数としてとの代わりにjavac, を含む 1 つの引数のみを受け取ります。したがって、ドキュメントを読んで、次のことを見つけます。-Xlint:serial -Werror-Xlint:serial-WerrorcompilerArguments

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>
            <configuration>
                <compilerArguments>
                    <Xlint:serial />
                    <Werror />
                </compilerArguments>
            </configuration>
        </plugin>

これは奇妙に見えます-コロンは名前空間にserial要素を作成しXlintますが、これはどこにも宣言されていません-しかし、それは機能します...リリースを行うまで:

$ mvn release:prepare

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project my-project: Error reading POM: Error on line 58: The prefix "Xlint" for element "Xlint:serial" is not bound.

どうやら、通常の POM リーダーは、リリース プラグインで使用されるものとは別の方法で XML 名前空間を処理します。

javacでは、複数のコマンド ライン スイッチに、プレーンな XML 要素に対して有効でない文字が含まれている場合、リリース プラグインを壊さずに渡すにはどうすればよいでしょうか?

4

4 に答える 4

5

http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#compilerArgsを参照してください

およびhttp://maven.apache.org/plugins/maven-compiler-plugin/examples/pass-compiler-arguments.html

Maven 3.1 以降

                        <source>1.6</source>
                        <target>1.6</target>
                        <showDeprecation>true</showDeprecation>
                        <showWarnings>true</showWarnings>
                        </processors>
                        <compilerArgs>
                          <arg>-verbose</arg>
                          <arg>-Aeclipselink.persistencexml=src/main/resources/META-INF/persistence.xml</arg>
                        </compilerArgs>

または Maven 3.0 以前

      <compilerArguments>
        <verbose />
      </compilerArguments>
      <compilerArgument>-Aeclipselink.persistencexml=src/main/resources/META-INF/persistence.xml</compilerArgument>
于 2014-05-19T16:54:33.690 に答える
2

でスペースがエスケープされているようですがcompilerArgument、引用符には同じことが当てはまりません。したがって、引数内のスペースを引用符で囲むと、次の 2 つの引数が得られます。

<compilerArgument>-Xlint:serial" "-Werror</compilerArgument>

javac "-Xlint:serial" "-Werror"これはではなく を呼び出しますjavac "-Xlint:serial -Werror"

私が見つけることができるこれについてのドキュメントには何もありません。

于 2012-07-05T06:44:36.633 に答える
1

これは maven-compiler-plugin のバグだと思います。開発者に問題を提出しました: MCOMPILER-178

于 2012-07-23T10:16:49.893 に答える