现在,maven-3为快照构件的 < uniqueVersion > false 执行了 放下支架,看起来您确实需要使用带时间戳的 SNAPSHOTS。尤其是 m2eclipse,它在内部使用了 maven 3,似乎会受到影响,当 SNAPSHOTS 不是唯一的时候更新快照不起作用。
将所有快照设置为 uniqueVersion = false 似乎是最好的 练习过
现在,切换到带时间戳的版本似乎没有什么大问题,毕竟它们是由一个中央连接库管理的,该库能够定期删除旧的快照。
问题在于本地开发人员工作站。他们的本地存储库使用独特的快照快速增长 非常。
如何处理这个问题?
现在我看到了以下可能的解决方案:
防止本地存储库占满硬盘空间的最佳方法是什么?
更新:
为了验证这种行为并提供更多信息,我设置了一个小型的 nexus 服务器,构建两个项目(a 和 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>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”上运行“部署”时
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 server...) ,本地存储库将用旧版本 很快填充
更新2:
为了测试失败的原因,我做了更多的测试。每个测试都针对干净的所有内容运行(de/glauche 从机器和 nexus 中删除)
计算机上的本地存储库 A 确实包含 Snapshot.jar + fast-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>
好的,下一次尝试使用 maven3.0.1(在删除项目 a 的所有痕迹之后)
机器 A 上的本地存储库看起来更好,只有一个没有时间戳的 jar
在 nexus 中只有一个带时间戳的 jar,元数据显示:
De Glauche 一 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 + fast-timestamp.jar: (
使用外部 maven 2.2.1运行包目标-> 本地存储库具有 Snapshot.jar + fast-timestamp.jar: (
因此,回顾一下: maven3中的“部署”目标比2.2.1中的效果更好,创建机器上的本地存储库看起来不错。 但是,接收器总是以大量的时间压缩版本结束..。
我做错了什么?
更新3
我还测试了其他各种配置,首先用人工-> 相同的行为替换 nexus。然后使用 linux maven 3客户机从存储库管理器下载快照-> 本地存储库仍然有带时间戳的快照: (