关于java:Maven在依赖项版本(javax.servlet-api)中自动删除尾随零

Maven automatically removes trailing zeroes in dependency version (javax.servlet-api)

我正在尝试将javax.servlet-api项目添加到我的Maven Java项目中(有关此依赖性版本的更多信息,请参见此链接)。我想将版本3.1.0添加到我的项目中。所以自然地,我将此依赖关系添加到我的pom.xml文件中:

1
2
3
4
5
<dependency>
    <groupId>javax.servlet</groupId>
    javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>

但是,当Maven尝试下载该工件的jar / pom文件时,会出现错误,因为它会自动将版本3.1.0转换为3.1(不是其实际版本),并且找不到该工件的版本。在中央Maven回购中:

1
2
3
4
5
6
7
8
Downloading: http://repo.maven.apache.org/maven2/javax/servlet/javax.servlet-api/3.1/javax.servlet-api-3.1.pom
[WARNING] The POM for javax.servlet:javax.servlet-api:jar:3.1 is missing, no dependency information available
Downloading: http://repo.maven.apache.org/maven2/javax/servlet/javax.servlet-api/3.1/javax.servlet-api-3.1.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
...
[ERROR] Failed to execute goal on project my-java-project: Could not resolve dependencies for project com.example.myproject:my-project:war:1.0-SNAPSHOT: Could not find artifact javax.servlet:javax.servlet-api:jar:3.1 in central (http://repo.maven.apache.org/maven2) -> [Help 1]

有人知道我如何告诉Maven不要删除pom.xml文件中依赖项的版本标记中的尾随零吗?已知其他解决方法吗?

注意:我确实检查了此SOF帖子(Servlet 3.0 API的Maven依赖关系?),但是该作者的解决方案是对servlet-api使用<scope>provided</scope>依赖关系,由于我想要,我对此没有兴趣为避免需要使用提供的范围。


it gets an error because it automatically converts version 3.1.0 to 3.1

那是不可能的。 Maven绝不会转换版本号(快照除外)。它将始终下载您在pom.xml中指定的版本,无论该版本实际上是否存在。您可以通过在标签的版本区域中写一个伪造的数字来进行测试,然后触发mvn install命令,您将看到它会尝试下载该版本,然后失败。

要调试问题,请首先验证pom

中是否具有正确的maven条目。

1
2
3
4
5
<dependency>
    <groupId>javax.servlet</groupId>
    javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>

其次,我建议您删除文件夹~/.m2/repository/javax/servlet/以删除任何错误的jar,从而迫使maven重新下载所有javax.servlet jars