首页 > 解决方案 > Maven 编译旧的 servlet 依赖项

问题描述

由于某种原因,Maven 正在编译旧的 servlet 依赖项而不是新的依赖项。我尝试使用以下方法清理缓存:

mvn dependency:purge-local-repository -DreResolve=false

mvn dependency:resolve

这就是日志给我的:

[INFO]
[INFO] --- maven-dependency-plugin:2.8:resolve (default-cli) @ examproject ---
[INFO]
[INFO] The following files have been resolved:
[INFO]    com.google.cloud:google-cloud-core-http:jar:1.84.0:compile
[INFO]    com.google.cloud.datastore:datastore-v1-proto-client:jar:1.6.0:compile
[INFO]    org.threeten:threetenbp:jar:1.3.3:compile
[INFO]    com.google.protobuf:protobuf-java:jar:3.7.1:compile
[INFO]    io.grpc:grpc-core:jar:1.21.0:compile
[INFO]    com.google.appengine.tools:appengine-gcs-client:jar:0.7:compile
[INFO]    joda-time:joda-time:jar:2.3:compile
[INFO]    javax.transaction:transaction-api:jar:1.1:compile
[INFO]    com.google.api.grpc:proto-google-common-protos:jar:1.16.0:compile
[INFO]    jstl:jstl:jar:1.2:compile
[INFO]    com.google.oauth-client:google-oauth-client-appengine:jar:1.30.1:compile
[INFO]    com.fasterxml.jackson.core:jackson-core:jar:2.9.9:compile
[INFO]    com.google.j2objc:j2objc-annotations:jar:1.3:compile
[INFO]    org.codehaus.mojo:animal-sniffer-annotations:jar:1.17:compile
[INFO]    io.grpc:grpc-context:jar:1.19.0:compile
[INFO]    com.googlecode.json-simple:json-simple:jar:1.1.1:compile
[INFO]    com.google.api:gax-httpjson:jar:0.64.1:compile
[INFO]    javax.annotation:javax.annotation-api:jar:1.3.2:compile
[INFO]    com.google.appengine:appengine-api-1.0-sdk:jar:1.9.76:compile
[INFO]    com.google.http-client:google-http-client-jackson:jar:1.20.0:compile
[INFO]    io.opencensus:opencensus-contrib-grpc-metrics:jar:0.21.0:compile
[INFO]    org.hamcrest:hamcrest-core:jar:1.3:test
[INFO]    com.google.code.gson:gson:jar:2.8.5:provided
[INFO]    com.google.api.grpc:proto-google-iam-v1:jar:0.12.0:compile
[INFO]    com.google.auth:google-auth-library-oauth2-http:jar:0.16.2:compile
[INFO]    commons-logging:commons-logging:jar:1.2:compile
[INFO]    com.google.cloud:google-cloud-datastore:jar:1.84.0:compile
[INFO]    com.google.errorprone:error_prone_annotations:jar:2.3.2:compile
[INFO]    com.google.http-client:google-http-client:jar:1.31.0:compile
[INFO]    commons-codec:commons-codec:jar:1.11:compile
[INFO]    com.google.http-client:google-http-client-jackson2:jar:1.31.0:compile
[INFO]    com.google.code.findbugs:jsr305:jar:3.0.2:compile
[INFO]    net.spy:spymemcached:jar:2.12.3:compile
[INFO]    com.google.api:api-common:jar:1.8.1:compile
[INFO]    com.google.guava:guava:jar:19.0:compile
[INFO]    io.opencensus:opencensus-contrib-http-util:jar:0.21.0:compile
[INFO]    com.google.http-client:google-http-client-protobuf:jar:1.20.0:compile
[INFO]    com.google.oauth-client:google-oauth-client-servlet:jar:1.30.1:compile
[INFO]    io.opencensus:opencensus-api:jar:0.21.0:compile
[INFO]    com.google.api-client:google-api-client-servlet:jar:1.30.2:compile
[INFO]    com.google.apis:google-api-services-storage:jar:v1-rev108-1.22.0:compile
[INFO]    com.google.api.grpc:proto-google-cloud-datastore-v1:jar:0.67.0:compile
[INFO]    com.google.http-client:google-http-client-appengine:jar:1.30.1:compile
[INFO]    javax.servlet.jsp:javax.servlet.jsp-api:jar:2.3.1:provided
[INFO]    io.grpc:grpc-api:jar:1.21.0:compile
[INFO]    com.google.oauth-client:google-oauth-client:jar:1.22.0:compile
[INFO]    org.apache.httpcomponents:httpclient:jar:4.5.9:compile
[INFO]    com.google.cloud:google-cloud-core:jar:1.84.0:compile
[INFO]    com.google.api-client:google-api-client-appengine:jar:1.30.2:compile
[INFO]    org.apache.httpcomponents:httpcore:jar:4.4.11:compile
[INFO]    com.google.protobuf:protobuf-java-util:jar:3.7.1:compile

[INFO]    javax.servlet:javax.servlet-api:jar:3.1.0:provided

[INFO]    com.google.api:gax:jar:1.47.1:compile
[INFO]    com.google.auth:google-auth-library-credentials:jar:0.16.2:compile
[INFO]    com.google.android:annotations:jar:4.1.1.4:compile
[INFO]    junit:junit:jar:4.12:test
[INFO]    javax.jdo:jdo2-api:jar:2.3-eb:compile
[INFO]    org.slf4j:slf4j-api:jar:1.7.25:compile

[INFO]    javax.servlet:servlet-api:jar:2.5:compile

[INFO]    com.googlecode.objectify:objectify:jar:6.0.4:compile
[INFO]    org.codehaus.jackson:jackson-core-asl:jar:1.9.11:compile
[INFO]    com.google.api-client:google-api-client:jar:1.22.0:compile
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  48.139 s
[INFO] Finished at: 2019-08-12T10:51:40+02:00
[INFO] ------------------------------------------------------------------------

如您所见,提供了 3.1.0,但由于某种原因,编译的是 2.5。这是我的 POM,它主要是预编译的,我添加了一些依赖项:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project 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/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <packaging>war</packaging>
    <version>0.1.0-SNAPSHOT</version>

    <groupId>examproject</groupId>
    <artifactId>examproject</artifactId>

    <properties>
        <appengine.maven.plugin.version>2.1.0</appengine.maven.plugin.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.showDeprecation>true</maven.compiler.showDeprecation>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.google.cloud</groupId>
                <artifactId>google-cloud-bom</artifactId>
                <version>0.102.0-alpha</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>com.google.appengine.tools</groupId>
            <artifactId>appengine-gcs-client</artifactId>
            <version>0.7</version>
        </dependency>
        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
            <scope>provided</scope>
        </dependency>
        <!-- Compile/runtime dependencies -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>com.google.appengine</groupId>
            <artifactId>appengine-api-1.0-sdk</artifactId>
            <version>1.9.76</version>
        </dependency>
        <dependency>
            <groupId>com.googlecode.objectify</groupId>
            <artifactId>objectify</artifactId>
            <version>6.0.4</version>
        </dependency>
        <!-- Test Dependencies -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <!-- for hot reload of the web application -->
        <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
        <plugins>


            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>appengine-maven-plugin</artifactId>
                <version>${appengine.maven.plugin.version}</version>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <version>3.0.0-M2</version>
                <executions>
                    <execution>
                        <id>enforce-maven</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <!-- appengine-maven-plugin requires Maven 3.5.0 -->
                                <requireMavenVersion>
                                    <version>3.5.0</version>
                                </requireMavenVersion>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

为了做几件事(使用 getPart 方法和其他东西),我需要 3.1.0 servlet。

更新:

如果我尝试删除 C:\Users\Gabriel.m2\repository\javax\servlet\servlet-api,它会在我更新项目后重新创建文件夹。出于某种原因,Maven 显然使用 2.5 servlet 而不是 3.1.0,我不明白为什么。

标签: mavenservletsdependencies

解决方案


这是 Gabriel Costache 的答案,我从问题中复制/粘贴了该答案:


我设法解决了它,如果有人需要它,我会发布我所做的事情。

基本上,appengine-gcs-client 工件由他自己的 servlet 2.5 编译。如果您有类似的问题,请运行

mvn dependency:tree

并找到您的依赖项的编译位置,而不是像这样添加排除标记

        <dependency>
        <groupId>com.google.appengine.tools</groupId>
        <artifactId>appengine-gcs-client</artifactId>
        <version>0.7</version>
        <exclusions>
            <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

推荐阅读