Maven重復類的解決


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則不會再報錯

 

 
        
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM