2012-08-13 61 views
1

我在我的項目有進口以下兩種庫如何偏好庫在行家

<dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-web-api</artifactId> 
     <version>6.0</version> 
     <scope>provided</scope> 
    </dependency> 

現在我想用類HttpServletRequest的從包的JavaEE的Web API。問題是javax servlet也包含這個類,應用程序正在使用這個而不是我想要的庫。我如何改變它?

+2

你不能只是使用JEE API和刪除Servlet API的?我認爲jee已經包含了完整的servlet api。 – Stephan 2012-08-13 07:12:31

+0

我不能這樣做 – hudi 2012-08-13 07:16:09

+0

謹慎解釋你爲什麼不能這樣做*? – maba 2012-08-13 07:17:27

回答

1

好吧,我發現它。我可以排除這個庫:

<exclusions> 
       <exclusion> 
        <artifactId>servlet-api</artifactId> 
        <groupId>javax.servlet</groupId> 
       </exclusion> 
      </exclusions> 

,然後它的作品

2

你不能。刪除任一個。這兩個類都在相同的命名空間/包中。 HttpServletRequest是由一個標準定義的,它應該表現相同的方式。

+0

我不能這樣做 – hudi 2012-08-13 07:17:10

+0

然後,你是運氣不好。 – 2012-08-13 08:54:15

1

既然你現在有一條評論,說明javax.servlet來自父母,那麼我認爲這是不可能的。據之前討論:Is there anyway to exclude artifacts inherited from a parent POM?

如果您有什麼樣的父POM控制的,那麼你應該嘗試改變它有一個可選的標籤:

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>servlet-api</artifactId> 
    <version>2.5</version> 
    <scope>provided</scope> 
    <optional>true</optional> 
</dependency> 

然後,它會不會被列爲您的子項目的傳遞依賴項。

http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html