Maven 2 清除生成计算机上的Maven本地存储库
在CI构建服务器上,本地Maven存储库重复地(几天后)填充文件系统。 在这种情况下,其他人会采取什么策略来修剪本地存储库?Maven 2 清除生成计算机上的Maven本地存储库,maven-2,continuous-integration,Maven 2,Continuous Integration,在CI构建服务器上,本地Maven存储库重复地(几天后)填充文件系统。 在这种情况下,其他人会采取什么策略来修剪本地存储库? -Max文件系统有多大?我们为每晚超过30天的构建和zap快照分配了10gb的内存。这似乎奏效了 您是每X小时进行一次构建还是在代码更改时进行构建?切换到代码更改将在不降低覆盖率的情况下减少工件的数量 是否在本地安装所有快照?你不需要在所有情况下都这样做。在大多数情况下,只需要在本地安装那些主动开发的从属快照 您是否在本地安装EAR/WAR文件?你可能也不需要它们 你有多
-Max文件系统有多大?我们为每晚超过30天的构建和zap快照分配了10gb的内存。这似乎奏效了 您是每X小时进行一次构建还是在代码更改时进行构建?切换到代码更改将在不降低覆盖率的情况下减少工件的数量 是否在本地安装所有快照?你不需要在所有情况下都这样做。在大多数情况下,只需要在本地安装那些主动开发的从属快照 您是否在本地安装EAR/WAR文件?你可能也不需要它们
你有多少工作空间?我们使用哈德逊,只保留最后5个版本 Maven dependency插件的目标是允许您从本地存储库中删除给定项目的依赖项,如果每天对每个项目运行一次,快照将不会累积
或者你可以采取一种更加焦土的方法。由于问题通常是带有时间戳的快照工件,因此可以使用删除与资源收集模式匹配的所有文件 例如(请注意,这可能需要一些调整,因为我是从内存中完成的):
maven antrun插件
包裹
跑
如果您使用的是hudson,您可以设置一个计划作业,每天删除一次整个存储库,或者类似的内容。我有一份名为hudson maven repo clean的工作,其配置如下:
- 构建/执行shell:
rm-rf~hudson/.m2/存储库
- 定期生成触发器/生成:
0***
排除配置,而不是显式的包含),请查看。我希望现在就实现它,因为我的确切用例是清除在我的CI(有时是工作站)机器上构建的大型WAR和EAR快照。我们特别为此使用。在我们公司中,父pom是嵌入在hudson构建概要文件中的删除项目工件目标。这样,在安装当前构建版本之前,将删除此工件的所有旧版本
...
<profile>
<id>hudson</id>
<activation>
<property>
<name>BUILD_TAG</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>remove-old-artifacts</id>
<phase>package</phase>
<goals>
<goal>remove-project-artifact</goal>
</goals>
<configuration>
<removeAll>true</removeAll>
</configuration>
</execution>
</executions>
</plugin>
...
。。。
哈德逊
构建标签
org.codehaus.mojo
构建助手maven插件
1.7
移除旧工件
包裹
删除项目工件
真的
...
将removeAll设置为true将清除除您正在处理的快照之外的所有其他快照。这可能很危险,因为这可能意味着分支的快照也将被删除
例如,如果快照1.0.0.18-snapshot表示头部,快照1.0.1.17-snapshot表示分支,则使用1.0.0.18-snapshot构建运行此插件将擦除1.0.1.17-snapshot文件夹
为了避免这种情况,removeAll应该设置为false。我们使用了一种稍有不同的(且不太可靠的)技术。所有构建“大型事物”(EAR、WAR、TAR)的工件的部署位置都被覆盖,如下所示:
<properties>
<discard-me-in-bit-bucket>file://${basedir}/target/_DELETEME</discard-me-in-bit-bucket>
</properties>
<distributionManagement>
<repository>
<id>upload-InternalSite</id>
<name>SoftwareLibrary External</name>
<url>${discard-me-in-bit-bucket}</url>
<layout>legacy</layout>
<uniqueVersion>false</uniqueVersion>
</repository>
<snapshotRepository>
<id>upload-InternalSite</id>
<name>Repository Name</name>
<url>${discard-me-in-bit-bucket}</url>
<layout>legacy</layout>
<uniqueVersion>false</uniqueVersion>
</snapshotRepository>
</distributionManagement>
我们还采用了另一种策略。在Hudson/Jenkins中,我们提供了一个设置文件,用于将.m2存储库放置在作业的工作区中。这允许我们在作业之前或之后删除整个存储库。它还使工件在工作区中可见,这有助于调试一些问题。让我澄清一下,我实际上只是在寻找一种清除旧快照的机制,而不是真正的大策略。知道我可以写一个脚本来实现这一点,我希望已经有了一些东西;有一些.Purge local repository现在支持includes和其他属性:我们也在这样做,并且在下游作业运行时遇到了工件“消失”的问题。(当A位于B的上游时:B启动,看到A的工件,很高兴。然后上游启动,将其清除;同时,作为一个大型构建,B仍在运行,并且由于A的工件突然消失而惨遭失败。虚拟机中的FileNotFoundException方)
<properties>
<discard-me-in-bit-bucket>file://${basedir}/target/_DELETEME</discard-me-in-bit-bucket>
</properties>
<distributionManagement>
<repository>
<id>upload-InternalSite</id>
<name>SoftwareLibrary External</name>
<url>${discard-me-in-bit-bucket}</url>
<layout>legacy</layout>
<uniqueVersion>false</uniqueVersion>
</repository>
<snapshotRepository>
<id>upload-InternalSite</id>
<name>Repository Name</name>
<url>${discard-me-in-bit-bucket}</url>
<layout>legacy</layout>
<uniqueVersion>false</uniqueVersion>
</snapshotRepository>
</distributionManagement>
find -type d -name '*_DELETEME' -exec rm -rf '{}' ';' -prune || echo $?