Ответ 1 (также охватывает 2 в другом смысле): использование раздела Artifactory «Artifact Bundle» на вкладке «Развертывание» может сделать ТРЮК, ПО КРАЙНЕЙ МЕРЕ, для загрузки артефакты нужным нам образом, сначала создав zip-файл (содержащий структуру и артефакты в нем) ---ИЛИ вы можете загрузить артефакты с помощью/вызовом Artifactory REST API способ.
Идея высокого уровня:
Создайте zip-файл с именем gigaproject.zip ИЛИ файл anyname.zip/.tar/compressed, который Artifactory сможет прочитать. Внутри zip создайте структуру — как эти артефакты будут загружаться в Artifactory
т.е. gigaproject.zip будет содержать следующие папки/структуры/файлы.
Случай 1:
com/company/project/gigaproject/9.8.0/linux/gigainstall
com/company/project/gigaproject/9.8.0/solaris/gigainstall
com/company/project/gigaproject/9.8.0/win32/gigainstall.exe
com/company/project/gigaproject/9.8.0/gigafile.dtd
com/company/project/gigaproject/9.8.0/gigaanotherfile.dtd
com/company/project/gigaproject/9.8.0/giga.jar
com/company/project/gigaproject/9.8.0/giga.war
ПРИМЕЧАНИЕ. В примере 1 я не использовал -x.x.x в имени файла (т. е. я использую обычный и простой giga.jar вместо giga-9.8.0.jar).
Вышеупомянутая загрузка/развертывание приведет к файлам (как показано на следующем снимке):
Итак, мы добились того, чего хотели. На самом деле (видимо, да), но не так, как Artifactory обычно хранит эти артефакты (так как они должны иметь версию -x.x.x, встроенную в имя файла, и где идентификатор артефакта должен соответствовать имени файла артефакта). Теперь, если вы хотите использовать следующее в файле сборки Gradle, вы НЕ МОЖЕТЕ, во-первых, вы не загрузили имя файла с именем версии -x.x.x, во-вторых, идентификатор артефакта в нашем случае 1 дерева был "gigaproject" ( после папки com/company/project), поэтому способ Gradle для определения идентификатора артефакта и имени файла артефакта, который вы хотите, не будет работать.
compile 'com.company.project:gigaproject:CANNOTSAY_HOW_TO_GET_GIGA_JARorGIGAINSTALL_with_without_extension'
Вывод: можно загружать любые файлы (с расширением/без расширения в Artifactory) в любую структуру, но это зависит от того, как ваша система сборки будет их использовать или сможет их использовать или нет. - Я удалил только что созданную структуру с файлом .zip случая 1 из репозитория Artifactory, чтобы попробовать следующий случай № 2, и удалил созданный файл .zip.
Случай 2:
Давайте создадим индивидуальное имя версии файла для каждого артефакта, а также создадим структуру в формате — как Artifactory фактически хранит их (артефакт, как видно в репозитории в виде дерева) и создадим файл .zip, содержащий эту структуру. Давайте воспользуемся той же функцией «Комплект артефактов», чтобы загрузить этот ZIP-файл для загрузки отдельных артефактов, которые нам нужны в Artifactory, где идентификатор артефакта (второе значение, которое мы упоминаем при попытке его использования) будет соответствовать имени файла артефакта в Artifactory.
Структура папки/файла для файла .zip:
com/company/project/gigainstall/9.8.0/gigainstall-9.8.0.linux
com/company/project/gigainstall/9.8.0/gigainstall-9.8.0.solaris
com/company/project/gigainstall/9.8.0/gigainstall-9.8.0.exe
com/company/project/gigafile/9.8.0/gigafile-9.8.0.dtd
com/company/project/gigaanotherfile/9.8.0/gigaanotherfile-9.8.0.dtd
com/company/project/giga/9.8.0/giga-9.8.0.jar
com/company/project/giga/9.8.0/giga-9.8.0.war
ПРИМЕЧАНИЕ. На этот раз мы будем использовать ту же функцию «Комплект артефактов» и для похожих файлов (gigainstall в обеих папках Linux/Solaris). 9.8.0.linux и gigainstall-9.8.0.solaris), т. е. когда мы будем использовать эти артефакты в Gradle в разделе зависимостей { ... } для компиляции, мы будем использовать способ x.x.x@ для получения этих артефактов из Artifactory. .
ОК, после успешного развертывания/загрузки «Artifact Bundle» я получил следующее сообщение.
Successfully deployed 7 artifacts from archive: gigaproject.zip (1 seconds).
Теперь давайте посмотрим, как это выглядит в Artifactory при поиске одного из артефактов/в дереве. Вы можете видеть, что теперь у нас есть файлы на месте с именем файла-x.x.x.extension, так что я могу легко использовать их в Gradle.
В файле сборки Gradle (build.gradle) я упомяну:
dependencies {
compile "com.company.project:gigainstall:9.8.0@linux"
compile "com.company.project:gigainstall:9.8.0@solaris"
compile "com.company.project:gigainstall:9.8.0@linux"
compile "com.company.project:giga:9.8.0
compile "com.company.project:giga:9.8.0@war
compile "com.company.project:gigafile:9.8.0@dtd
compile "com.company.project:gigaanotherfile:9.8.0@dtd
}
О-О-О!! - Это не сработало, см. ниже ошибку Gradle. Почему? - Функция загрузки/развертывания Artifactory Bundle загружает содержимое zip-файла, которое у вас есть в .zip, но НЕ создает файл .pom для каждого артефакта, который он развертывает. Таким образом, сборка Gradle потерпит неудачу. Может быть, в Ant это может быть успешным. Это происходило для каждого отдельного файла .jar/.war/.dtd/etc. Я просто показываю один пример ошибки.
При выполнении чистой сборки Gradle
Could not resolve all dependencies for configuration ':compile'.
> Could not resolve com.company.project:gigafile:0.0.0.
Required by:
com.company.project:ABCProjectWhichConsumesGIGAProjectArtifacts:1.64.0
> Could not GET 'http://artifactoryserver:8081/artifactory/ext-snapshot-local/com/company/project/gigafile/0.0.0/gigafile-0.0.0.pom'. Received status code 409 from server: Conflict
Случай 3. Давайте воспользуемся простым подходом (обходной путь, но избавит от многих проблем). Создайте файл gigaproject.zip со следующей структурой, этот подход использует - Нет значения версии x.x.x, встроенного в отдельный артефакт/имя файла в структуре папок/файлов. Мы будем использовать подход «Единый артефакт» (который автоматически создаст файл .pom для gigaproject.zip во время процесса загрузки/развертывания, предоставляемого Artifactory). Используя этот подход, вы по-прежнему сможете получить файл gigainstall, не требуя расширения его имени. На этапе загрузки/развертывания, как вы уже видели, вы загружаете gigaproject.zip, и артефакты загружают его в указанный целевой репозиторий как "gigaproject-x.x.x.zip", где x.x.x em> в нашем случае 9.8.0. См. снимок изображения ниже.
gigaproject/linux/gigainstall
gigaproject/solaris/gigainstall
gigaproject/win32/gigainstall.exe
gigaproject/gigafile.dtd
gigaproject/gigaanotherfile.dtd
gigaproject/gigaproject.zip
gigaproject/giga.jar
gigaproject/giga.war
Теперь загрузите его в Artifactory, используя функцию «Одиночный артефакт». Нажмите «Развернуть артефакт», как только вы настроите значения для GroupId, ArtifactId, Version и т. д.
Как только это будет загружено. Вы увидите артефакт zip в целевом репозитории (я взял плохой пример, обычно это будет libs-snapshot-local или libs-release-local вместо ext-...), вы сможете потреблять артефакт ZIP непосредственно в Gradle:
dependencies {
// This is the only line we need now.
compile "com.company.project:gigaproject:9.8.0@zip"
}
Как только .zip станет доступен для системы сборки Gradle, теперь вы можете указать Gradle распаковать этот .zip файл где-нибудь в вашей области сборки/рабочей области, где вы можете передать фактические (распакованные) файлы (gigainstall, .dtd, .jar, .war и т. д.) к процессу/шагам сборки.
PS: Варианты № 1 и 2, я думаю, сработали бы для Ant.
Ответ 2: Если вы каким-либо образом загрузили файл без расширения. Убедитесь, что вы также вручную создали/загрузили его POM-файл (например, если я загрузил gigainstall-9.8.0 как артефакт в com/company/project/gigainstall/9.8.0/gigainstall-9.8.0, то на том же уровне я должен/должен создать его файл POM (см. простой файл шаблона .pom для пользовательского артефакта jar или при загрузке расширенного файла с помощью развертывания «Single Artifact», вы увидите, что Отображается окно редактора POM) и загрузите оба, чтобы Gradle не выдал сообщение об отсутствии конфликта/ошибки POM. Ant может не нуждаться в pom (я этого не проверял).
Как только он появится в Artifactory, следующая строка должна работать — ИЛИ прокомментируйте, пожалуйста, если вы найдете другой способ.
dependencies {
// See nothing mentioned after - x.x.x@
compile "com.company.package:gigainstall:9.8.0@"
}
person
AKS
schedule
03.07.2014