Gradle: переход к многопроектной структуре - не удается разрешить хранилище
У меня есть проект, который зависит от локальной артефакты для нескольких зависимостей.
Gradle build на этом проекте работает нормально, с правильными настройками для репозитория:
buildscript {
repositories {
maven {
url "${artifactoryUrl}/libs-release"
}
}
dependencies {
classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.4.10'
}
}
repositories {
maven {
url "${artifactoryUrl}/repo"
}
}
artifactory {
contextUrl = "${artifactoryUrl}"
publish {
repository {
repoKey = 'libs-snapshot-local' // The Artifactory repository key to publish to
username = "${artifactoryUser}" // The publisher user name
password = "${artifactoryPassword}" // The publisher password
}
defaults {
// Reference to Gradle publications defined in the build script.
// This is how we tell the Artifactory Plugin which artifacts should be
// published to Artifactory.
publications('mavenJava')
publishArtifacts = true
// Properties to be attached to the published artifacts.
properties = ['qa.level': 'basic', 'dev.team' : 'core']
}
}
resolve {
repoKey = 'repo'
}
}
Я следовал учебным пособиям по многопроектной структуре. Похоже, я могу переместить раздел "хранилище" в корень gradle.build
файл. Тем не менее, когда я запускаю сборку gradle, я получаю сообщение об ошибке на всех зависимостях из артефакта:
Не удается разрешить внешнюю зависимость
Примечание: я также добавил gradle.properties
файл в корневом каталоге, который содержит все переменные (artifactoryUrl и т. д.).
Таким образом, кажется, что подпроект не может "увидеть" репозиторий, определенный в корне gradle.build
файл. Какие-либо предложения?
ОБНОВИТЬ
мой build.gradle
на корне dir теперь выглядит так:
allprojects {
}
subprojects {
buildscript {
repositories {
maven {
url "${artifactoryUrl}/libs-release"
}
}
dependencies {
classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.4.10'
}
}
repositories {
maven {
url "${artifactoryUrl}/repo"
}
}
artifactory {
contextUrl = "${artifactoryUrl}"
publish {
repository {
repoKey = 'libs-snapshot-local' // The Artifactory repository key to publish to
username = "${artifactoryUser}" // The publisher user name
password = "${artifactoryPassword}" // The publisher password
}
defaults {
// Reference to Gradle publications defined in the build script.
// This is how we tell the Artifactory Plugin which artifacts should be
// published to Artifactory.
publications('mavenJava')
publishArtifacts = true
// Properties to be attached to the published artifacts.
properties = ['qa.level': 'basic', 'dev.team' : 'core']
}
}
resolve {
repoKey = 'repo'
}
}
}
2 ответа
Вам нужно поставить repository
(а также artifactory
) блок (ы) в subprojects
или же allprojects
блок. В качестве таких:
subprojects {
repositories {
maven {
url "${artifactoryUrl}/repo"
}
}
...
}
Это гарантирует, что конфигурация будет сдавлена корневым каталогом. build.gradle
в конфигурации каждого из ваших подпроектов.
Также для артефактов, не забудьте применить плагин артефактов ко всем подпроектам:
subprojects {
apply plugin: "com.jfrog.artifactory"
...
}
Поэтому, посмотрев на некоторый пример, я понял, что buildscript
раздел должен быть за пределами subprojects
раздел, а не внутри. И это apply plugin: 'com.jfrog.artifactory'
следует также добавить в раздел подпроектов.
buildscript {
repositories {
maven {
url "${artifactoryUrl}/libs-release"
}
}
dependencies {
classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.4.10'
}
}
subprojects {
repositories {
maven {
url "${artifactoryUrl}/repo"
}
}
artifactory {
contextUrl = "${artifactoryUrl}"
publish {
repository {
repoKey = 'libs-snapshot-local' // The Artifactory repository key to publish to
username = "${artifactoryUser}" // The publisher user name
password = "${artifactoryPassword}" // The publisher password
}
defaults {
// Reference to Gradle publications defined in the build script.
// This is how we tell the Artifactory Plugin which artifacts should be
// published to Artifactory.
publications('mavenJava')
publishArtifacts = true
// Properties to be attached to the published artifacts.
properties = ['qa.level': 'basic', 'dev.team' : 'core']
}
}
resolve {
repoKey = 'repo'
}
}
}