可能性のあるトラブルシューティングのパスは、上記の依存関係管理を適用するvalidation-api
をインポートする唯一のライブラリであるgwt-user
のスコープ(provided
)にあります。
以下最初省略dropwizard-core
mvn dependency:tree -Dincludes=javax.validation
実行出力は次のようになります
[INFO] +- com.google.gwt:gwt-user:jar:2.8.0-beta1:provided
[INFO] | +- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO] | \- javax.validation:validation-api:jar:sources:1.0.0.GA:provided
は推移1.0.0のではなく、したがって、所望の1.1.0.Finalバージョンを取ります。 GAです。
(上記のスコープ、依存関係エントリごとの最後のトークンは、ルートがprovided
スコープにあるため、すべてprovided
になるはずです。ただし、validation-api
は、依存管理エントリのためにcompile
です)。
gwt-user
は省略し、出力は次のようになります。
[INFO] com.sample:sample2:jar:0.0.1-SNAPSHOT
[INFO] \- io.dropwizard:dropwizard-core:jar:0.9.2:compile
[INFO] \- io.dropwizard:dropwizard-validation:jar:0.9.2:compile
[INFO] \- org.hibernate:hibernate-validator:jar:5.2.2.Final:compile
[INFO] \- javax.validation:validation-api:jar:1.1.0.Final:compile
したがって、実際に、両方がそれをもたらすだろうが、最初は、一方、第2デフォルトとして(compile
)範囲provided
範囲として定義しました。また、validation-api
の依存関係管理のMavenはgwt-user
がprovided
であり、その推移的依存関係の全てはまた、希望にもかかわらず、compile
として、上記(gwt-user
を介してそれをもたらしている方法影響、(compile
)範囲デフォルト定義されている
この場合のように依存関係管理によって異なる定義がなされていない限り、provided
になります)。official Maven documentationあたりの依存関係を、提供
は
コンパイルとテストクラスパス上で利用できる
したがって、あなたが持っていると思われる、接続詞でコンパイルとテストの2つのライブラリ中にvalidation-api
とgwt-user
を持っているされています実行時の異なる結合(gwt-user
はとなり、実行時コンテナによってが提供されます)。
gwt-user
の範囲がprovided
である必要がある場合は、より細かいガバナンスを採用し、gwt-user
から直接validation-api
を除外することをおすすめします。したがって、validation-api
は、dropwizard-core
から、依存関係管理で必要とされるバージョンに持ち込まれます。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-core</artifactId>
<version>0.9.2</version>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<version>2.8.0-beta1</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
更新
以下のコメントから、また、あなたの依存関係の管理の一環として、以下のものを使用している:
、その後もその依存関係の管理に次のように指定している
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt</artifactId>
<version>2.8.0-beta1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
<!-- Note: use classifier=sources rather than type=java-sources so they're added to the classpath -->
<classifier>sources</classifier>
</dependency>
最初の設定を無効にすることはできましたが、 2番目のクラスをオーバーライドし、実際にはまだクラスパスに追加されています(上記の依存関係ツリーの出力を確認し、1.0.0.GAのソースは引き続き提供されたスコープ内に持ち込まれます)。それはコンパイラ/テストとランタイムのさらなる違いです。実行時には、クラスパスの一部としては持っていません。
したがって、依存関係管理に、1.1.0.Finalバージョンを上書きして追加することをお勧めします。これにより、最初のものと一貫性があります。
感謝を。私はあなたが正しい線に沿って考えていると思います。しかし、私は既に例外を試してみて、もう一度試しました。エラーは消えません。ランタイムは引き続き動作しますが、テストでは引き続き表示されます。だから、それはテストでは消えない。 –
実行中の依存関係ツリーの出力です: '[INFO] com.myproject:jar:1.0-SNAPSHOT [INFO] \ - io.dropwizard:dropwizard-validation:jar:0.9.2:コンパイル [INFO] \ - org.hibernate:hibernate-validator:jar:5.2.2.Final:コンパイル [INFO] \ - javax.validation:validation-api:jar:1.1.0.Final:コンパイルすると ' –
がより一貫性を持たせることができます。 dependencyManagementエントリに指定されたスコープを適用してから、追加したばかりの除外除外を削除してください。実行時に同じエラーが発生する可能性があります。これは最初はうまくいきませんが、正しい解決策に向かってさらに役立ちます。 –