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'
        }
    }
}
Другие вопросы по тегам