[英]How do I resolve dependency conflict for a Java file in IntelliJ IDEA?
[英]How do I resolve a dependency conflict in Maven?
我有一個相當大的舊項目,正在向其中添加組件。 該組件使用HtmlUnit 。 我可以使用Maven對其進行編譯,但是當我運行它時,我得到:
java.lang.NoSuchMethodError:
org.apache.http.conn.ssl.SSLConnectionSocketFactory.<init>
(Ljavax/net/ssl/SSLContext;[Ljava/lang/String;[Ljava/lang/String;Ljavax/net/ssl/HostnameVerifier;)
因此,它缺少正確的構造函數。 我認為這幾乎可以肯定是httpclient
的版本沖突,但是我不確定如何解決它。 這是我pom.xml
的相關部分(請注意我一直嘗試使用排除和依賴管理的所有游戲):
<dependencies>
<dependency>
<groupId>com.mycompany.mine</groupId>
<artifactId>my-base-project</artifactId>
<version>${project.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>base-project</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
</dependencies>
</dependencyManagement>
有任何想法嗎?
編輯 :它已經表明,這個問題是一個重復的這一個 ,但它不是,因為在這種情況下,依賴類型不是war
。
為了識別沖突的依賴關系,請使用mvn dependency:tree
。 我喜歡將其通過管道傳輸到文本文件以便於使用:
mvn dependency:tree > tree.txt
然后,使用您喜歡的文本編輯器來查找多種版本。
另外,如果您要查找特定的groupId或artifactId,請使用-Dincludes
標志:
mvn dependency:tree -Dincludes=<groupId>:<artifactId>:<version>:<packaging>
mvn dependency:tree -Dincludes=org.springframework <<< get all dependencies with by groupId
mvn dependency:tree -Dincludes=:spring-web <<< get all dependencies by artifactId
您可能還想在此處添加-Dverbose
標志。
要解決依賴關系沖突,有兩種方法:
1)排除您不想要的那一個
<depdency>
<groupId>some.stuff</groupId>
<artifactId>with.transitive.depdency</artifactId>
<exclusions>
<exclusion>
<groupId>something</groupId>
<artifactId>unwanted</artifactId>
<exclusion>
<exclusions>
<depdency>
通過這種方式,您將不得不排除所有引入可傳遞性的依賴。 因此,我更喜歡另一個。
2)明確添加所需的版本
<dependency>
<groupId>something</groupId>
<artifactId>with.version.conflict</artifactId>
<version>what I want</version>
</dependency>
這將確保任何傳遞依賴項都將與此確切版本交換。 如果某些框架實際上需要較舊的版本,則這也可能導致錯誤。 為了安全地使用此策略,您的依賴項必須與最新的可用版本(或同時發布的版本)相當接近。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.