Обработка имен файлов Artifactory Snapshot

В нашем артефакте у нас есть репозиторий моментальных снимков, определенный для обработки максимум 5 уникальных снимков. Мы добавили -SNAPSHOT-.extension к имени файла. SNAPSHOT также преобразуется в метку времени. Сборка выполняется с помощью gradle, а артефакт публикуется с помощью плагина bamboo и Artifactory.

Файл, развернутый в артефактори...

inhouse-snapshots:com/example/project/subproject/trunk-SNAPSHOT/subproject-trunk-SNAPSHOT-79.amp

становится...

inhouse-snapshots:com/example/project/subproject/trunk-SNAPSHOT/subproject-trunk-20120321.154621-1-79.amp

Это нормально, и каждая сборка добавляет новый файл с увеличенным номером сборки, но номер временной метки всегда остается 20120321.154621-1, поэтому у нас есть список файлов, например:

  • подпроект-багажник-20120321.154621-1-79.amp
  • подпроект-багажник-20120321.154621-1-80.amp
  • подпроект-багажник-20120321.154621-1-81.amp

У кого-нибудь есть решение или предложение для другого макета каталога?


person chris.ingenhaag    schedule 22.03.2012    source источник
comment
Эта замена временной метки моментального снимка не должна происходить в Artifactory. Artifactory заменяет только моментальные снимки артефактов, развернутых по допустимому стандартному пути Maven (этот пример недействителен) в репозитории с макетом Maven по умолчанию. Какой макет настроен для использования в вашем репозитории? Вы сами производите замену?   -  person noamt    schedule 25.03.2012
comment
Макет репозитория — maven2default, и я не выполнял замену снимка. Я проверил приведенные выше пути с помощью тестера путей в артефактной консоли администратора, почти все в порядке, за исключением того, что номера сборки 79, 80, ... распознаются как классификаторы. Я не уверен, что это правильно. Так же тестировал без номеров сборки, в этом случае артефакт будет перезаписан. Там я ожидал бы второй файл с новой меткой времени и -2... в конце метки времени   -  person chris.ingenhaag    schedule 28.03.2012
comment
О, я только что узнал свою опечатку выше, которая вызывает неверный путь maven2, исправил ее. Прости   -  person chris.ingenhaag    schedule 28.03.2012


Ответы (2)


Как вы правильно заметили, номер сборки, который вы прикрепили к имени развернутого файла, идентифицируется как классификатор; это потому, что Maven не указывает номер сборки с неуникальным снимком.

Artifactory поддерживает ту же комбинацию метки времени и номера сборки для «партий» артефактов и «поднимает» метку времени и номер сборки при обнаружении новой «партии»; Существует два способа, с помощью которых Artifactory обнаруживает «пакеты» артефактов с целью преобразования неуникальных снимков в уникальные:

  1. Артефакты развертываются в точном порядке: артефакт (без классификатора), POM, присоединенные артефакты (с классификаторами); Первый обычный артефакт, который будет развернут после POM, создаст новый «пакет»; следовательно, предоставление новой временной метки и номера строителя.

  2. Артефакты, развернутые с параметром матрицы ключ "build.timestamp" и значение временной метки эпохи в миллисекундах; Артефакты с одинаковыми значениями метки времени будут связаны с одним и тем же «пакетом».

Вы должны либо опустить номер сборки из развернутого файла и развернуть его с матричным параметром «build.timestamp» (чтобы Artifactory увеличивал «пакет» при каждом новом развертывании), либо развернуть файлы уже с уникальный снимок.

person noamt    schedule 28.03.2012
comment
Да, спасибо. Развертывание файлов с уникальной временной меткой вместо SNAPSHOT делает работу автоматической очистки моментальных снимков. - person chris.ingenhaag; 29.03.2012

Я опубликовал это решение: https://discuss.gradle.org/t/2-8-2-9-mavendeployer-doesnt-honour-uniqueversion-false-in-maven-uploadarchives/13370/8 Проблема, с которой я столкнулся, заключалась в нескольких публикациях в издательском разделе. Решение для меня состояло в том, чтобы добавить дополнительные артефакты в одну публикацию. Затем все элементы, банка API, исходная банка, исходная банка API и основная банка имеют одинаковую отметку времени для SNAPSHOT. Кажется, это автоматически заботится о build.timestamp для меня.

task apiJar(type: Jar) {
    classifier = 'api'
    from(sourceSets.main.output) {
        include "com/company/app/dto/**"
    }
}

task sourceJar(type: Jar, dependsOn: classes) {
    classifier = 'sources'
    from sourceSets.main.allSource
}

task apiSourceJar(type: Jar, dependsOn: classes) {
    classifier = 'api-sources'
    from(sourceSets.main.allSource) {
        include "com/company/app/dto/**"
    }
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
            pom.withXml {
                asNode().appendNode('description', 'APP Sprint Boot App')
            }
            artifact apiJar
            artifact sourceJar
            artifact apiSourceJar
        }
    }
    repositories {
        maven {
            credentials {
                username = 'username'
                password = 'password'
            }
            if(project.version.endsWith('-SNAPSHOT')) {
                url "http://server:9081/artifactory/libs-snapshot-local"
            } else {
                url "http://server:9081/artifactory/libs-release-local"
            }
        }
    }
}
person Randy    schedule 15.07.2016