1. 設置倉庫,我的Settings里設置使用了公司的Nexus
<?xml version="1.0"?> <settings 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/xsd/settings-1.0.0.xsd"> <localRepository>D:\mavenrepo</localRepository> <servers> <server> <id>snapshots</id> <username>snapshots</username> <password>xxx</password> <filePermissions>664</filePermissions> <directoryPermissions>775</directoryPermissions> </server> </servers> <distributionManagement> <repository> <id>releases</id> <name>xxx Nexus Releases</name> <url>xxxx</url> </repository> <snapshotRepository> <uniqueVersion>false</uniqueVersion> <id>snapshots</id> <name>xxx Nexus Snapshots</name> <url>xxxxx</url> </snapshotRepository> </distributionManagement> <profiles> <profile> <id>xxxNexus</id> <repositories> <repository> <id>xxxNexus</id> <url>xxx</url> <releases> <enabled>true</enabled> <!-- always , daily (default), interval:X (where X is an integer in minutes) or never. --> <updatePolicy>daily</updatePolicy> <checksumPolicy>warn</checksumPolicy> </releases> <snapshots> <enabled>true</enabled> <checksumPolicy>fail</checksumPolicy> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>xxxNexus</id> <url>xxxx</url> <releases> <enabled>true</enabled> <checksumPolicy>warn</checksumPolicy> </releases> <snapshots> <enabled>true</enabled> <checksumPolicy>fail</checksumPolicy> </snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>xxxNexus</activeProfile> </activeProfiles> </settings>
2.發現重復類,執行命令
mvn -U clean package -Plocal -Dmaven.test.skip=true enforcer:enforce -DcheckDeployRelease_skip=true
-Dmaven.test.skip=true: 如果命令包含了test phase,則忽略單元測試
enforcer:enforce: 查找重復類
-DcheckDeployRelease_skip: 不知道什么意思
執行命令后,輸出如下
可以發現 jcl-over-slf4j 與 commons-logging 包有重復類沖突
3. 在pom里查找重復類沖突的包並排除重復類沖突
由於在我的pom里並沒有顯式寫入common-logging的dependency,所以我們需要查找那個jar包依賴了commons-logging,執行如下命令
mvn -U dependency:tree -Dverbose
發現如下片段
在這個叫qsso-client的庫里依賴了commons-logging包,所以我們在pom里將其排除
3. 排除重復類
<dependency> <groupId>com.xxx.security</groupId> <artifactId>qsso-client</artifactId> <version>${qsso-client.version}</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>
這樣就將qsso-client的commons-logging包排除了,之后再運行enforcer:enforce則不會再報錯