¿Cómo reemplazo un repositorio Maven con un directorio local después de que se define en un Gradle construir?

votos
1

Estoy tratando de escribir pruebas para un proceso de construcción, por lo que mi unidad de prueba quiere reemplazar las ubicaciones de repositorio reales con lugares locales para evitar el envenenamiento del servidor real. (Además, supongo, la persona que ejecuta la prueba podría no tener acceso a publicar de todos modos.)

En la preparación en sí:

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
            }
        }
    }
}

En mi compilación de prueba, Estoy intentando anularlo con esto:

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

Cuando trato de ejecutar la construcción, me sale:

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

Hay una gran cantidad de mensajes en la web acerca de este error específico, pero siempre parece ser las personas que accidentalmente se ponen en una ruta de archivo cuando deberían haber puesto un URI. Estoy poniendo en un URI de forma deliberada, sin embargo, así es que hay una manera de conseguir que esto funcione?

También he intentado esto:

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

Eso no funciona con:

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.

Me sorprendió que la supresión de todos los repositorios no también eliminar todas las tareas que poseen. Cuando intento eliminar mediante programación la tarea que se queja, Gradle afirma que no existe.

Publicado el 07/11/2018 a las 22:45
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
1

Bien, terminé tener que leer la fuente de Gradle (de nuevo), pero he encontrado una manera de hacerlo. Esencialmente, usted directamente puede establecer credentialsde nuevo a null, como este:

publishing {
    repositories {
        getByName('snapshot') {
            url = uri('/tmp/local-repo/snapshots')
            configuredCredentials = null
        }
        getByName('release') {
            url = uri('/tmp/local-repo/release')
            configuredCredentials = null
        }
    }
}
Respondida el 12/11/2018 a las 00:18
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more