Развертывание Gradle Nexus и FlatDir без плагина java, ear или war
У меня многопроектная сборка Gradle (версия 2.1!!), состоящая из не-Java проектов.
Я хотел бы развернуть сгенерированные артефакты (файлы.tar.gz) в Nexus, а также в каталог.
В настоящее время я определяю репозитории в корне build.gradle
в repositories
блок, а также снова для каждого подпроекта в repositories
блок внутри subprojects
в корне build.gradle
файл.
Я применяю base
плагин к корневому проекту и тому maven-publish
Плагин для всех подпроектов, которые имеют артефакты для развертывания.
Я пытался следовать инструкциям здесь:
- https://docs.gradle.org/2.1/userguide/publishing_maven.html
- https://docs.gradle.org/2.1/dsl/org.gradle.api.publish.maven.MavenPublication.html
- https://discuss.gradle.org/t/how-to-have-multiple-uploadarchives/19381/3
- Как я могу сделать uploadArchives зависимым от другой задачи?
- и еще несколько...
но ничего не получалось.:-(
Вот что я делаю:
...
# apply the maven-publish plugin only to sub-projects that produce artifacts that should be uploaded.
apply plugin: 'maven-publish'
publishing {
publications {
tarFiles (MavenPublication) {
artifact compressTar
}
}
repositories {
add rootProject.repositories.fsShare
add rootProject.repositories.nexusDeploy
}
}
...
compressTar
это мой обычай Tar
задача, которая создает артефакты, которые я хочу загрузить.
Когда я выполню ./gradlew publishTarFilesPublicationToNexusDeployRepository
Я получаю следующую ошибку:
Execution failed for task ':mySubProject:publishTarFilesPublicationToNexusDeployRepository'.
> Failed to publish publication 'tarFiles' to repository 'nexusDeploy'
> Failed to retrieve remote metadata myRootProject:mySubProject:0.0.0.0-SNAPSHOT/maven-metadata.xml: Could not transfer metadata myRootProject:mySubProject:0.0.0.0-SNAPSHOT/maven-metadata.xml from/to remote (https://myProject.nexus.url:443/nexus3/repository/builds/): Could not get resource 'myRootProject/mySubProject/0.0.0.0-SNAPSHOT/maven-metadata.xml'
Когда я выполню uploadArchives
, задача выполнена успешно, но нигде ничего не загружено и из вывода это выглядит как uploadArchives
задание выполняется только для подпроектов, в которых не применен плагин maven.
Как правильно это сделать? Какие плагины я должен применять, когда и где?
1 ответ
Видимо, здесь было две не связанные "проблемы на работе".
Проблема 1): я не смог опубликовать на Nexus и получил Failed to retrieve remote metadata
-ошибка:
Ответ 1): Я пытался опубликовать "SNAPSHOT" в хранилище, которое было настроено так, чтобы не принимать сборку "SNAPSHOT". Переименование версии сборки из 1.2.3.4-SNAPSHOT во что-либо другое (например, 1.2.3.4-SNAPSHOT-dev
или более разумный 1.2.3.build4`) работал нормально.
Проблема 2) Публикация в хранилище flatDir не работала. Плагин maven-publish не создал для него задачу публикации.
Ответ 2) Чтобы использовать maven-publish для публикации в каталоге, flatDir
очевидно, не распознается как хранилище, в которое плагин maven-publish может публиковать. Определение хранилища 'directory' следующим образом работало нормально:
maven {
name "fsShare"
url "/share/pkg"
}