有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Maven如何安装/部署时间戳快照

环境:Maven 3.3.9

我有一个maven jar模块,版本为1.0-SNAPSHOT。当我执行mvn install时,安装到本地存储库(~/.m2/repository)中的jar没有时间戳。我同意,您希望在~/.m2/repositoryrepo中有时间戳jar的情况并不常见。但还有几个问题:

  1. mvn install是否自动附加时间戳?寻找一些 配置方式,而不是在最终名称中使用${timestamp}
  2. 自动时间戳机制是否适用于mvn deploy
  3. 有没有办法告诉maven使用~/.m2/repository 它是为mvn deploy而设计的吗

谢谢

拉凯什


共 (2) 个答案

  1. # 1 楼答案

    mvn install只会将您的项目放入本地缓存,这意味着它可以用于您机器上的其他项目

    mvn deploy将工件部署到您的远程存储库中,该存储库通常是公司存储库管理器

    SNAPSHOT的情况下,这意味着此工件尚未完成,正在开发中。这意味着您可以创建同一版本的多个状态,如1.0.0-SNAPSHOT。在部署到存储库管理器期间创建的时间戳旨在使不同的工件可用于开发。如果要使用快照的最新版本,可以通过-U选项进行控制

    准备就绪后,您将创建一个所谓的版本,该版本将设置为类似1.0.0(无快照)的版本,该版本也将部署到一个不可变的版本存储库中

    此外,在本地缓存$HOME/.m2/repository中设置时间戳并没有真正意义,因为您可以控制在那里安装工件的时间,而不是其他人,并且您应该防止使用finalName更改,因为这只适用于target文件夹,而不适用于本地缓存。 最后,为mvn deploy使用本地缓存没有意义,因为这背后的想法是什么?最好是开始使用存储库管理器,如Nexus、Artifactory或Archiva,特别是在公司环境中工作的时候

  2. # 2 楼答案

    除@khmarbaise的答案外,请参见以下参考资料:

    • Maven / Introduction to Repositories

      There are strictly only two types of repositories: local and remote. The local repository refers to a copy on your own installation that is a cache of the remote downloads, and also contains the temporary build artifacts that you have not yet released.

      Remote repositories refer to any other type of repository, [...]

    • Maven: The Complete Reference, 15.2.8. Repositories

      Repositories are remote collections of projects from which Maven uses to populate the local repository of the build system.

    • Repository - SNAPSHOT Handling内容如下:

      This documentation was targetted at Maven 2.0 alpha 1. It is here only for historical reference and to be updated and integrated into the Maven documentation.

      但我没有找到任何最新的文档,其中集成了此功能。(@khmarbaise?)

      Timestamped files are not created on install in the local repository for reasons of disk space preservation. However, when a SNAPSHOT is resolved and downloaded, it is saved with its timestamp version number (eg: 0.15-20050401.150432-2).

    • Understanding Maven Version Numbers

    • Maven Dependency Resolution - A Repository Perspective

    长话短说:

    相同的快照版本可以从不同的主机部署到远程存储库,因此必须在那里进行区分。它们通过时间戳(和构建编号)进行区分

    只有在Maven解析并从远程下载的情况下,本地存储库中才会有一个带有时间戳(和构建号)的工件

    因此:

    1. 没有
    2. 将破坏Maven的存储库处理本地远程的能力