2

プロジェクトを ant から maven に変換したところ、ソース ファイルが正しい順序でコンパイルされていないように動作する jar のビルド中にエラーが発生しました。次のような列挙型があります。

public enum LmsError implements ILmsError {
    UC0001() {
        @Override
        public String msg() {
            return this.getClass().getName() + "-" + this + ": constructor failed: ";
        }
    },

インターフェイスは次のようになります。

public interface ILmsError {
    public abstract String msg();
}

...そして、これはそれを使用するコードの例です。'throws' 行は、以下のエラー メッセージが訴えている行ですが、ステートメントをコメント アウトすると、次に msg() メソッドが参照されたときに同様のエラーが発生します。列挙型のどの要素が使用されているかは問題ではありません。

} catch (Exception e) {
      throw new RuntimeException(LmsError.UC0001.msg() + "Unable to construct status based on " + codeEnumeration + ":" + e.getMessage(), e);
}

mvn クリーン コンパイル

[compiler:compile]
Compiling 129 source files to C:\bsaastad\workspaces\theportaltree\redirect\redirect-ejb\target\classes
-------------------------------------------------------------
COMPILATION ERROR : 
-------------------------------------------------------------
com/theportaltree/redirect/status/RedirectStatus.java:[156,58] cannot find symbol
symbol  : method msg()
location: class com.theportaltree.lms.LmsError
1 error

クリーンなしで再度コンパイルすると、次のような結果が得られます (すべてのファイルを処理するには、さらに 2 回のコンパイルが必要になる場合があります)。

[compiler:compile]
Compiling 89 source files to C:\bsaastad\workspaces\theportaltree\redirect\redirect-ejb\target\classes

[resources:testResources]

クリーンなコンパイル。

失敗後に出力ディレクトリを見ると、生成された列挙型クラスが存在しないことがわかります。これがエラーを説明しています。コンパイルが成功するとすぐに、列挙型クラスが期待どおりに存在します。

これはすべて同じプロジェクトにあるため、依存関係の問題ではないと思います。これをantビルドからmaven(maven newbie)に変換したところ、数年間問題なくコンパイルされました。pom.xml のプラグイン セクションを次に示します。何か足りないものはありますか?何かの間違ったバージョン?私は困惑しています:

<build>
    <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>2.5.1</version>
      <configuration>
        <!-- put your configurations here -->
        <source>1.6</source>
        <target>1.6</target>
      </configuration>
    </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ejb-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <ejbVersion>3.1</ejbVersion>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.8.1</version>
            <configuration>
                <!-- javadoc configuration options here -->
            </configuration>
        </plugin>
    </plugins>
</build>

どんな助け/アイデアも大歓迎です。

4

2 に答える 2

2

コマンドラインMavenビルドの実行と同時にIDEを実行していますか?

IDEがMaven対応の場合(たとえば、Eclipseとm2Eclipseプラグイン)、2つの「レーシング」Mavenエンジン間で望ましくない相互作用が発生する場合があることがわかりました。

IDEを閉じると信頼性の高いクリーンビルドが得られる場合は、その構成オプションを確認してください。ファイルシステムをポーリングして変更を確認している可能性があります。これにより、(クリーン?)ビルドが開始されます。

于 2012-09-20T05:09:44.643 に答える
1

コマンドラインからmavenを実行してみてください(現在実行しているのと同じmvn clean compile)。

ところで、インターフェイスILmsError、列挙型LmsError、およびランタイム例外をスローしてメッセージを使用するコードは同じモジュールに存在しますか?多分それは「依存性」の欠如だけですか?

于 2012-09-20T05:32:17.060 に答える