Maven无法解决正确的SNAPSHOT依赖关系

时间:2019-04-01 21:25:29

标签: java maven dependencies artifactory

我会很快。我的Maven版本是3.5.0。我在Web应用程序中使用了一些库。这些库是单独安装的,并部署在工件实例中。

我有以下pom(部分):

<project>
  ....
  <properties>
    <process.domain.common.version>0.0.1-SNAPSHOT</process.domain.common.version>
  </properties>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.intersoft</groupId>
        <artifactId>process.domain.common</artifactId>
        <version>${process.domain.common.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.intersoft</groupId>
      <artifactId>process.domain.common</artifactId>
    </dependency>
  </dependencies>
</project>

但是在库中,Maven放置了这个库:

process.domain.common-0.0.1-20190319.151024-3.jar

代替此:

process.domain.common-0.0.1-SNAPSHOT.jar

我的依赖项从工件中解决。为什么Maven会使用日期名称而不是SNAPSHOT来放置此临时库?在所有解析的库中都不会发生这种现象。

3 个答案:

答案 0 :(得分:1)

最后,我找到了解决方案。

解决方案是在war项目的pom.xml中添加maven war插件:

<properties>
   <version.war.plugin>2.5</version.war.plugin>
</properties>

<build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>${version.war.plugin}</version>
                <configuration>
                    <warName>${project.artifactId}</warName>
                </configuration>
            </plugin>
        </plugins>
    </build>

证明:

不带war插件的WEB-INF / lib:

WEB-INF / lib 附带战争插件:

答案 1 :(得分:0)

Maven将当前日期附加到快照中,以比较本地存储库中的快照版本和远程存储库中的快照版本,并评估是否需要下载远程jar,因为今天下载0.0.1-SNAPSHOT可能会提供与以下文件不同的文件昨天或明天下载。

答案 2 :(得分:0)

如果您在本地构建快照,则仅以名称0.0.1-SNAPSHOT进行构建。如果将其部署到Artifactory,它将获得一个内部时间戳版本号,如您提到的那样。

再次下载时,Artifactory为您提供了最新的时间戳。

因此在本地,您有时会使用-SNAPSHOT版本,有时会使用时间戳版本。战争中的文物如何命名的确切规则对我来说还不清楚,但是无论您是否带有时间戳,都应该没事。