Как заменить репозиторий Maven локальным каталогом после его определения в сборке Gradle? - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь написать тесты для процесса сборки, поэтому мой модульный тест хочет заменить фактические расположения репозитория локальными, чтобы избежать отравления реального сервера. (Кроме того, я полагаю, что у человека, проводящего тест, в любом случае может не быть доступа к публикации.)

В самой сборке:

publishing {
    repositories {
        maven {
            name = 'snapshot'
            url = "${artifactory_contextUrl}/libs-snapshot-local"
            credentials {
                username artifactory_user
                password artifactory_password
            }
        }

        maven {
            name = 'release'
            url = "${artifactory_contextUrl}/libs-release-local"
            credentials {
                username artifactory_user
                password artifactory_password
            }
        }
    }
}

В моей тестовой сборке я пытаюсь переопределить это с помощью:

publishing {
    repositories {
        getByName('snapshot') {
            url = uri('/tmp/local-repo/snapshots')
        }
        getByName('release') {
            url = uri('/tmp/local-repo/release')
        }
    }
}

Когда я пытаюсь запустить сборку, я получаю:

Execution failed for task ':publishMavenJavaPublicationToReleaseRepository'.
> Failed to publish publication 'mavenJava' to repository 'release'
   > Authentication scheme 'all'(Authentication) is not supported by protocol 'file'

В сети есть много сообщений об этой конкретной ошибке, но всегда кажется, что люди, которые случайно указали путь к файлу, когда им следовало ввести URI. Тем не менее, я намеренно вставляю URI, так есть ли способ заставить это работать?

Я также пробовал это:

publishing {
    repositories {
        clear()
        maven {
            name = 'snapshot'
            url = uri('/tmp/local-repo/snapshots')
        }
        maven {
            name = 'release'
            url = uri('/tmp/local-repo/release')
        }
    }
}

Это не с:

A problem occurred configuring root project 'test-common-plugin1913987501683151177'.
> Exception thrown while executing model rule: PublishingPluginRules#publishing(ExtensionContainer)
  > Cannot add task 'publishMavenJavaPublicationToSnapshotRepository' as a task with that name already exists.

Я был удивлен, что удаление всех репозиториев также не удаляет все задачи, которыми они владеют. Когда я пытаюсь программно удалить задачу, на которую она жалуется, Gradle заявляет, что она не существует.

1 Ответ

0 голосов
/ 12 ноября 2018

Хорошо, мне пришлось читать источник Gradle (снова), но я нашел способ сделать это. По сути, вы можете напрямую установить credentials обратно на null, например:

publishing {
    repositories {
        getByName('snapshot') {
            url = uri('/tmp/local-repo/snapshots')
            configuredCredentials = null
        }
        getByName('release') {
            url = uri('/tmp/local-repo/release')
            configuredCredentials = null
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...