依存関係の収束を確認するために Maven エンフォーサ プラグインを使用しています。この(不自然な)例を考えると:
project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>warren</groupId>
<artifactId>warren</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>warren Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.sf.jtidy</groupId>
<artifactId>jtidy</artifactId>
<version>r938</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-tools-api</artifactId>
<version>2.5.1</version>
</dependency>
</dependencies>
<build>
<finalName>warren</finalName>
<!-- The Maven Enforcer -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.4</version>
<dependencies>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>extra-enforcer-rules</artifactId>
<version>1.0-beta-2</version>
</dependency>
</dependencies>
<executions>
<!-- ******************************************************* -->
<!-- Ensure that certain really important things are checked -->
<!-- and fail the build if any of these are violated -->
<!-- ****************************************************** -->
<execution>
<id>enforce-important-stuff</id>
<goals>
<goal>enforce</goal>
</goals>
<phase>validate</phase>
<configuration>
<rules>
<requireMavenVersion>
<version>3.2.1</version>
</requireMavenVersion>
<requireJavaVersion>
<version>1.7</version>
</requireJavaVersion>
<DependencyConvergence />
<bannedDependencies>
<searchTransitive>true</searchTransitive>
<excludes>
<!-- Should be javax.servlet:javax.servlet-api:3.0.1 -->
<exclude>javax.servlet:servlet-api:2.*</exclude>
<!-- Should be org.springframework:3.2.* . Note this is
for the core spring framework. Others such as
WS etc may be different, but the convergence to the underlying
core Spring framework should be the same -->
<exclude>org.springframework:2.*</exclude>
<exclude>org.springframework:3.0.*</exclude>
<exclude>org.springframework:3.1.*</exclude>>
<!-- Should be slf4j 1.7.5 with logback and
bridges to JCL, JUL and log4j (this means these
individual libraries should not be included as the
"bridges" implement the API and redirect to the
underlying SLF4j impl -->
<exclude>log4j:log4j</exclude>
<exclude>commons-logging</exclude>
<exclude>org.slf4j:1.5*</exclude>
<exclude>org.slf4j:1.6*</exclude>
</excludes>
</bannedDependencies>
</rules>
<failFast>true</failFast>
</configuration>
</execution>
<execution>
<id>warn-about-stuff-which-may-cause-problems</id>
<goals>
<goal>enforce</goal>
</goals>
<phase>validate</phase>
<configuration>
<rules>
<banDuplicateClasses>
<ignoreClasses>
</ignoreClasses>
<findAllDuplicates>true</findAllDuplicates>
</banDuplicateClasses>
</rules>
<fail>false</fail>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
私はこの出力を得る:
[ERROR] +-warren:warren:1.0-SNAPSHOT
[ERROR] +-org.apache.maven.plugin-tools:maven-plugin-tools-api:2.5.1
[ERROR] +-org.codehaus.plexus:plexus-utils:1.5.6
[ERROR] and
[ERROR] +-warren:warren:1.0-SNAPSHOT
[ERROR] +-org.apache.maven.plugin-tools:maven-plugin-tools-api:2.5.1
[ERROR] +-org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1
[ERROR] +-org.codehaus.plexus:plexus-utils:1.0.4
したがって、この問題を回避するためにワイルドカードの除外を使用するように pom を変更できると単純に考えました。
<dependency>
<groupId>net.sf.jtidy</groupId>
<artifactId>jtidy</artifactId>
<version>r938</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-tools-api</artifactId>
<version>2.5.1</version>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
しかし、Maven はワイルドカードを無視し、同じエラーが発生します。エラーを修正する唯一の方法は、グループとアーティファクト ID を明示的に入力することです。
<exclusions>
<exclusion>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
</exclusion>
</exclusions>
この状況でワイルドカード除外を使用することは可能ですか? 注意: Maven 3.0.5、3.2.1、および 3.3.3 を使用してみましたが、うまくいきません!
どうもありがとう