当前位置: 首页 > 面试题库 >

您如何有效地处理Maven-3带时间戳的快照?

曹旭
2023-03-14
问题内容

既然maven-3确实放弃了对快照工件的<uniqueVersion>false</uniqueVersion>的支持,看来您确实需要使用带有时间戳的SNAPSHOTS。特别是在内部确实使用maven
3的m2eclipse似乎受到它的影响,当SNAPSHOTS不是唯一的时,update-snapshots无法正常工作。

将所有快照设置为uniqueVersion=false之前,这似乎是最佳实践

现在,切换到带有时间戳的版本似乎没什么大问题,毕竟它们都由中央关系存储库管理,该存储库能够定期删除旧快照。

问题是本地开发人员工作站。他们在当地的仓库很快就成长 非常 大的独特的快照。

如何解决这个问题?

现在,我看到了以下可能的解决方案:

  • 要求开发人员定期清除存储库(这导致很多麻烦,因为删除它需要很长时间,甚至下载所有所需的时间也更长)
  • 设置一些脚本,该脚本确实会从本地存储库中删除所有 SNAPSHOT 目录,并要求开发人员不时运行该脚本(比第一个脚本好,但仍然需要花费一些时间来运行和下载当前快照)
  • 使用dependency:purge-local-repository插件(从eclipse运行时会出现问题,由于打开的文件,需要从每个项目中运行)
  • 在每个工作站上设置nexus并设置作业以清理旧快照(最佳结果,但我不想维护50台以上nexus服务器,而开发人员工作站上的内存总是很紧)
  • 完全停止使用SNAPSHOTS

防止本地存储库填满硬盘空间的最佳方法是什么?

更新:

为了验证行为并提供更多信息,我设置了一个小型的nexus服务器,构建两个项目(a和b),然后尝试:

A:

<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>
  <groupId>de.glauche</groupId>
  <artifactId>a</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <distributionManagement>
    <snapshotRepository>
        <id>nexus</id>
        <name>nexus</name>
        <url>http://server:8081/nexus/content/repositories/snapshots</url>
    </snapshotRepository>
  </distributionManagement>

</project>

b:

<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>
  <groupId>de.glauche</groupId>
  <artifactId>b</artifactId>
  <version>0.0.1-SNAPSHOT</version>
    <distributionManagement>
    <snapshotRepository>
        <id>nexus</id>
        <name>nexus</name>
        <url>http://server:8081/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
  </distributionManagement>
 <repositories>
    <repository>
        <id>nexus</id>
        <name>nexus</name>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
        <url>http://server:8081/nexus/content/repositories/snapshots/</url>
    </repository>
 </repositories>
  <dependencies>
    <dependency>
        <groupId>de.glauche</groupId>
        <artifactId>a</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
  </dependencies>
</project>

现在,当我使用maven并在“ a”上运行“ deploy”时,

a-0.0.1-SNAPSHOT.jar
a-0.0.1-20101204.150527-6.jar
a-0.0.1-SNAPSHOT.pom
a-0.0.1-20101204.150527-6.pom

在本地存储库中。每次运行部署目标时,都会使用新的时间戳版本。当我尝试从关系服务器更新快照时,也会发生相同的情况(关闭“
a”项目,从本地存储库中删除它,构建“ b”)

在构建大量快照的环境中(想想哈德森服务器…),本地存储库 很快就会* 用旧版本填充 *

更新2:

为了测试失败的方式和原因,我进行了更多测试。每次测试都对所有内容进行清洁(de / glauche会从计算机和链接中删除)

  • 使用maven 2.2.1部署mvn:

计算机A上的本地存储库确实包含snapshot.jar + snapshot-timestamp.jar

但是:在连结中只有一个带有时间戳的jar,元数据显示为:

<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <groupId>de.glauche</groupId>
  <artifactId>a</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <versioning>
    <snapshot>
      <timestamp>20101206.200039</timestamp>

      <buildNumber>1</buildNumber>
    </snapshot>
    <lastUpdated>20101206200039</lastUpdated>
  </versioning>
</metadata>
  • 在m2eclipse(嵌入式m3 final)中运行更新依赖项(在计算机B上)->本地存储库具有snapshot.jar + snapshot-timestamp.jar :(
  • 使用外部Maven 2.2.1运行软件包目标->本地存储库具有snapshot.jar + snapshot-timestamp.jar :(

好的,接下来尝试使用Maven 3.0.1(在删除项目a的所有痕迹之后)

  • 机器A上的本地存储库看起来更好,只有一个没有时间戳的jar

  • 在关联中只有一个带有时间戳的jar,元数据显示为:

de.glauche 0.0.1-SNAPSHOT

    <snapshot>
  <timestamp>20101206.201808</timestamp>
  <buildNumber>3</buildNumber>
</snapshot>
<lastUpdated>20101206201808</lastUpdated>
<snapshotVersions>
  <snapshotVersion>
    <extension>jar</extension>
    <value>0.0.1-20101206.201808-3</value>
    <updated>20101206201808</updated>
  </snapshotVersion>
  <snapshotVersion>
    <extension>pom</extension>
    <value>0.0.1-20101206.201808-3</value>
    <updated>20101206201808</updated>
  </snapshotVersion>
</snapshotVersions>
  • 在m2eclipse(嵌入式m3 final)中运行更新依赖项(在计算机B上)->本地存储库具有snapshot.jar + snapshot-timestamp.jar :(

  • 使用外部Maven 2.2.1运行软件包目标->本地存储库具有snapshot.jar + snapshot-timestamp.jar :(

因此,回顾一下:maven3中的“部署”目标比2.2.1中的工作更好,创建机器上的本地存储库看起来不错。但是,接收器总是以很多带有时间戳的版本结尾…

我究竟做错了什么 ?

更新3

我还测试了各种其他配置,首先用人工制品->相同行为替换了关系。然后使用linux maven
3客户端从存储库管理器下载快照->本地存储库仍带有时间戳的快照:(


问题答案:

<uniqueVersion>配置适用于已通过mvn deploy部署到Maven存储库(例如Nexus)的工件。

要从Nexus中删除这些文件,您可以轻松地创建一个自动作业,每天清除SNAPSHOT存储库。可以将其配置为保留一定数量的快照或保留一定时间。它超级简单,效果很好。

开发人员机器上本地存储库中的工件从“安装”目标到达此处,并且不使用这些时间戳记…它们只会继续替换一个和唯一的SNAPSHOT版本,除非您还要增加修订号(例如1.0.0-快照到1.0.1-快照)。



 类似资料:
  • 问题内容: 由于磁盘空间的考虑,我只想在存储库中保留任何快照的一个版本。而不是保留带有时间戳后缀的多个版本 例如ecommerce-2.3-20090806.145007-1.ear 我该如何设置?这是构建设置还是存储库(Artifactory)设置 谢谢! 问题答案: 最简单(也是推荐的方法)是使用非唯一快照。如果必须使用唯一快照,则可以在Artifactory中执行此操作,方法是在artwor

  • 问题是,我希望能够检索已解析工件的时间戳。如果我执行“mvn-x”选项,调试日志中显示的所有内容都是Artifactid-1.1.0-Snapshot,而不是时间戳。 我似乎无法显示哪个时间戳被翻新了。我可以把一些看起来像。m2的脚本合在一起,但我想知道是否有一种干净的方法来显示正在使用的快照的时间戳?

  • 我有几个库,我已经手动部署到我的Nexus存储库中,使用: 包装战争时有没有可能消除时间戳?

  • 我有6秒钟的音频记录(),格式为。我想转录音频文件到文本使用亚马逊服务。为此,我创建了一个名为的bucket,并将音频文件上传到bucket。当我试图将语音转换为文本时,一个6秒的音频需要13.12秒。下面是我的代码片段 在这里,我的代码工作得很好,即使在嘈杂的音频上,准确性也很棒,但时间消耗太高了。我在哪里犯了错误,是什么拖了这么长时间来抄写?一旦我获得了转录的,提取所需信息的时间就可以忽略不计

  • 如何在Flink中的迭代数据流循环中处理时间戳? null

  • 本文向大家介绍python如何快速生成时间戳,包括了python如何快速生成时间戳的使用技巧和注意事项,需要的朋友参考一下 结果是 知识点扩展: 获取秒级时间戳与毫秒级时间戳、微秒级时间戳 返回 获取当前日期时间 返回 到此这篇关于python如何快速生成时间戳的文章就介绍到这了,更多相关python生成时间戳的简单方法内容请搜索呐喊教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持呐喊教