Maven 2 清除生成计算机上的Maven本地存储库

Maven 2 清除生成计算机上的Maven本地存储库,maven-2,continuous-integration,Maven 2,Continuous Integration,在CI构建服务器上,本地Maven存储库重复地(几天后)填充文件系统。 在这种情况下,其他人会采取什么策略来修剪本地存储库? -Max文件系统有多大?我们为每晚超过30天的构建和zap快照分配了10gb的内存。这似乎奏效了 您是每X小时进行一次构建还是在代码更改时进行构建?切换到代码更改将在不降低覆盖率的情况下减少工件的数量 是否在本地安装所有快照?你不需要在所有情况下都这样做。在大多数情况下,只需要在本地安装那些主动开发的从属快照 您是否在本地安装EAR/WAR文件?你可能也不需要它们 你有多

在CI构建服务器上,本地Maven存储库重复地(几天后)填充文件系统。 在这种情况下,其他人会采取什么策略来修剪本地存储库?
-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 $?