如何在maven中优先选择库

时间:2012-08-13 07:08:24

标签: java maven

我在项目中导入了两个库

    <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>

现在我想从包javaee-web-api中使用类HttpServletRequest。问题是javax servlet也包含这个类,应用程序正在使用它而不是库我想要的。我怎么能改变它?

3 个答案:

答案 0 :(得分:2)

你做不到。删除任何一个。这两个类都在同一个命名空间/包中。 HttpServletRequest由标准定义,它的行为应该相同。

答案 1 :(得分:1)

由于您现在有一条评论说明javax.servlet来自父母pom,所以我认为不可能。之前已经讨论过: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

答案 2 :(得分:1)

好的,我找到了。我可以排除这个库:

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

然后它起作用