0

ビルド自動化ツールとしてMaven/m2eを使用して、この継承されたプロジェクトを取得しました。そのままSVNからチェックアウトされたこのプロジェクトが壊れていることを除いて、すべて素晴らしくてかっこいいです...つまり、いくつかの重複したクラスエラーでビルドに失敗します。

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.1:compile (default-compile) on project myproj: Compilation failure: Compilation failure:
[ERROR] \Users\Daniel\workspace\myproj\target\generated-sources\cxf\org\package1\services\ClassA.java:[36,7] duplicate class: org.package1.services.ClassA

ClassAさて、ビルド環境に3回存在するのは事実です。

c:/Users/Daniel/workspace/myproj/src/main/java/org/package1/services/ClassA.java
c:/Users/Daniel/workspace/myproj/src/main/java/org/package1/www/services/ClassA.java
c:/Users/Daniel/workspace/myproj/target/generated-sources/cxf/org/package1/services/ClassA.java

しかし、それらは異なるパッケージに属しています。

  • パッケージorg.package1.services;
  • パッケージorg.package1.www.services;

では、なぜコンパイラは重複したクラスについて文句を言うのでしょうか?

(または、不平を言っているのはMavenですか?)

私は元の作者の設計上の考慮事項に精通していないので、これらの重複を解決する方法についてのアイデアをいただければ幸いです。

4

3 に答える 3

5

2つのパッケージに3つのクラスがあります。したがって、2つのクラス同じパッケージに含まれています。これらの2つのファイル:

.../myproj/src/main/java/org/package1/services/ClassA.java
.../myproj/target/generated-sources/cxf/org/package1/services/ClassA.java

...両方が貢献していますorg.package1.services.ClassA(これは、コンパイラが文句を言っている完全修飾クラス名です、注意してください)。あなたが提供した情報に基づいて、あなたがどちらを使うべきかは明確ではありません。

于 2012-12-06T13:55:54.537 に答える
3

クラスが異なるパッケージで同じ単純な名前を持っているという事実は重要ではありません。クラスは、パッケージ名も含む完全な名前であると見なされます。Javaでは、2つの異なるクラスローダーによってロードされる限り、実際には同じJVMに同じフルネームの2つのクラスを持つことができます(これはあなたの場合ではありません)。

これで、同じ名前の2つのクラスができましたorg.package1.services.ClassA。1つは自分で作成し、もう1つは生成したものです。両方が必要で、名前を変更したくない場合は、一方に別のクラスローダーを使用する必要があります(複雑なので、生成されたクラスの名前を変更すると簡単になります)。

于 2012-12-06T14:00:58.183 に答える
1

どちらが複製されているのではなくClassA、どちらが複製されorg.package1.services.ClassAているのかです。

package eorg.package1.services;他のファイルの先頭にが表示されないように変更する必要があります。

于 2012-12-06T13:56:38.353 に答える