Удаление локального репозитория Maven на машине сборки

На сервере сборки CI локальный репозиторий Maven периодически заполняет файловую систему (через несколько дней). Какую стратегию используют другие, чтобы урезать локальное хранилище в таком случае? -Максимум

Ответы на вопрос(6)

й вариант, так как он предлагает толькоexcludes конфигурация в отличие от явногоincludes), посмотрите наУдалить проект Артефакт Моджо, Я'Я собираюсь реализовать это сейчас, так как мой точный вариант использования - очистить большие снимки WAR и EAR, которые строятся на моих компьютерах CI (и иногда рабочей станции).

 dannrob23 апр. 2013 г., 19:58
Очистить локальный репозиторий теперь поддерживает включает и другие свойства:maven.apache.org/plugins/maven-dependency-plugin/...

выделенных для сборок и снимков, сделанных старше 30 дней каждую ночь. Это похоже на работу

Вы делаете сборки каждые X часов или когда код меняется? Переход на изменения кода уменьшит количество артефактов без уменьшения покрытия.

Вы устанавливаете все снимки локально? Ты неЭто нужно делать во всех случаях. В большинстве случаев только те снимки, которые являются активно разработанными зависимостями, должны быть установлены локально.

Вы устанавливаете файлы EAR / WAR локально? Вы, вероятно, неони тоже не нужны.

Сколько рабочих мест вы держите? Мы используем Hudson и сохраняем только последние 5 сборок.

 Max Spring21 авг. 2009 г., 05:30
Позвольте мне уточнить, что яЯ на самом деле просто ищу механизм, чтобы стереть старые снимки, а не просто грандиозную стратегию. Зная, что я мог бы написать сценарий для этого, я надеялся на что-то уже доступное.

Используя Hudson, вы можете настроить запланированное задание, чтобы просто удалять весь репозиторий один раз в день или что-то в этом роде. Я'у меня есть работа под названиемhudson-maven-repo-clean который имеет эту конфигурацию:

Сборка / выполнение оболочки:rm -rf ~hudson/.m2/repositoryПостроить триггеры / строить периодически:0 0 * * *

которые строятбольшие вещи (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>

Эта стратегия заставляет цель развертывания помещать вещи в целевой каталог, который, конечно, будет уничтожен следующей операцией CLEAN. Чтобы стать еще более агрессивным, у нас есть шаг пост-сборки, который делает это:

find -type d -name '*_DELETEME' -exec rm -rf '{}' ';' -prune || echo $?

Мы также используем еще одну стратегию. В Hudson / Jenkins мы предоставляем файл настроек для размещения репозитория .m2 в рабочей области для работы. Это позволяет нам удалить весь репозиторий до или после работы. Это также делает артефакты видимыми в рабочей области, что помогает в устранении некоторых проблем.

 Joel Purra05 янв. 2013 г., 03:33
Смотрите также-delete флаг; Есть некоторыепримеры в википедии.

Мы специально используем для этогоплагин build-helper, В нашей компании родительский 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>
  ...
</plugins></build></profile>

Если для параметра removeAll установлено значение true, все другие снимки, кроме той, над которой вы работаете, будут уничтожены. Это может быть опасно, так как это может означать, что снимки для ветки также будут уничтожены.

Например, если у вас есть снимок 1.0.0.18-SNAPSHOT, представляющий HEAD, и снимок 1.0.1.17-SNAPSHOT, представляющий ветвь, запуск этого плагина со сборкой 1.0.0.18-SNAPSHOT приведет к стиранию папки 1.0.1.17-SNAPSHOt.

Чтобы обойти этот сценарий, следует удалить falseAll.

 Grégory Joseph11 июн. 2013 г., 19:12
Мы'повторяем и это, и сталкиваемся с проблемой артефактов "исчезают» пока работают нижестоящие (С A вверх по течению от B: B начинается, видит A 'Артефакты счастливы. Затем вверх по течению начинается, стирает его; B, тем временем, будучи большой сборкой, все еще работает и терпит неудачу, потому что внезапно A 'Артефакты исчезли. FileNotFoundException участник в ВМ)

продувка локального репозитария цель, которая позволяет вам удалить зависимости для данного проекта из локального репозитория, если этот запуск выполняется, скажем, раз в день для каждого проекта, снимки не будут накапливаться.

В качестве альтернативыЭто более выжженный подход, который вы могли бы использовать. Поскольку проблема обычно заключается в артефактах моментальных снимков с метками времени, вы можете использоватьMaven-antrun-плагин удалить все файлы, которые соответствуют шаблону сбора ресурсов.

Например (обратите внимание, что это может потребовать некоторые изменения, как ямы сделали это по памяти)

<plugin>
  <artifactid>maven-antrun-plugin</artifactid>
  <executions>
    <execution>
      <phase>package</phase>
      <configuration>
        <tasks>
          <delete>
            <fileset dir="${settings.localRepository}">
              <include name="**/*.jar">
              <exclude name="**/*.pom">
              <exclude name="**/*.war">
              <exclude name="**/*.ear">
              <exclude name="**/*.md5">
              <exclude name="**/*.sha">
              <!--any other extensions?...-->
              <!--match the timestamp pattern-->
              <containsregexp expression="[0-9]{8}.[0-9]{6}-[0-9]+">
            </containsregexp></exclude></exclude></exclude></exclude></exclude></include></fileset>
          </delete>
        </tasks>
      </configuration>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
</plugin>

Ваш ответ на вопрос