gpt4 book ai didi

java - 你如何有效地处理 maven-3 时间戳快照?

转载 作者:IT老高 更新时间:2023-10-28 11:40:43 28 4
gpt4 key购买 nike

既然 maven-3 为快照人工制品的 false 做了 drop support,看来您真的需要使用带时间戳的 SNAPSHOTS。尤其是 m2eclipse,它在内部确实使用了 maven 3 似乎受到了它的影响,当 SNAPSHOTS 不是唯一的时,更新快照不起作用。

将所有快照设置为 uniqueVersion=false 似乎最好 practice before

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

问题在于本地开发人员工作站。他们的本地存储库通过独特的快照迅速增长得非常大。

如何处理这个问题?

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

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

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

    更新:

    为了验证行为并提供更多信息,我设置了一个小型 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>

    乙:
    <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

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

    在构建大量快照的环境中(想想 hudson 服务器...),本地存储库填满了旧版本 快速

    更新 2:

    为了测试失败的方式和原因,我做了更多的测试。每个测试都针对干净的所有内容运行(de/glauche 从机器和 nexus 中删除)
  • mvn 使用 maven 2.2.1 部署:

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

    但是:nexus 中只有一个带时间戳的 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
  • 在 nexus 中只有一个带时间戳的 jar,元数据显示:


    德格劳什
    一种
    0.0.1-快照

    <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

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

    最佳答案

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

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

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

    关于java - 你如何有效地处理 maven-3 时间戳快照?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4275466/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com