通过maven publish在gradle中设置凭据

通过maven publish在gradle中设置凭据,gradle,build.gradle,Gradle,Build.gradle,我使用的是gradle v3.4,并且已经从secrets.properties文件(传递到project.ext)中填充了属性,但是当我使用凭据部分中的变量时,我从nexus Compliance获得了一个关于身份验证问题的错误,这使我相信字符串插值无法正常工作。我可以在凭证部分之前打印变量值 build.gradle maven { credentials { println(project.nexusUsername) //prints the v

我使用的是gradle v3.4,并且已经从secrets.properties文件(传递到project.ext)中填充了属性,但是当我使用凭据部分中的变量时,我从nexus Compliance获得了一个关于身份验证问题的错误,这使我相信字符串插值无法正常工作。我可以在凭证部分之前打印变量值

build.gradle

        maven {
            credentials {
println(project.nexusUsername)  //prints the value
                username '${project.nexusUsername}'
                password '${project.nexusPassword}'
            }
            if (project.version.endsWith("-SNAPSHOT")) {
                url "http://nexus.somewhere.com/repository/some-java-snapshot/"
            } else {
                url "http://nexus.somewhere.com/repository/some-java-release/"
            }
        }
publishing {
    publications {
        shadow(MavenPublication) {
            from components.shadow
            groupId project.group
            artifactId project.artifactId
        }
    }
    repositories {
        maven {
            credentials {
                username project.someUsername
                password project.somePassword
            }
            if (project.version.endsWith("-SNAPSHOT")) {
                url project.someSnapshot
            } else {
                url project.someRelease
            }
        }
    }
}
更新
我更新了上面的凭证部分以使用双引号(而不是单引号),但这并没有解决问题。单引号是字符串文字-如果需要字符串插值,则需要在groovy中使用双引号

单引号表示没有变量扩展的字符串文字

请使用


用户名project.nexusUsername
密码project.nexusPassword


参考资料:

问题在于如何在外部属性文件中指定属性。我对属性文件中的字符串值使用了双引号,这导致了身份验证失败。一旦我从外部属性文件中删除了双引号,我就能够发布到nexus

不正确的外部属性文件设置

someUsername="someuser"
someUsername=someuser
正确的外部属性文件设置

someUsername="someuser"
someUsername=someuser
build.gradle

        maven {
            credentials {
println(project.nexusUsername)  //prints the value
                username '${project.nexusUsername}'
                password '${project.nexusPassword}'
            }
            if (project.version.endsWith("-SNAPSHOT")) {
                url "http://nexus.somewhere.com/repository/some-java-snapshot/"
            } else {
                url "http://nexus.somewhere.com/repository/some-java-release/"
            }
        }
publishing {
    publications {
        shadow(MavenPublication) {
            from components.shadow
            groupId project.group
            artifactId project.artifactId
        }
    }
    repositories {
        maven {
            credentials {
                username project.someUsername
                password project.somePassword
            }
            if (project.version.endsWith("-SNAPSHOT")) {
                url project.someSnapshot
            } else {
                url project.someRelease
            }
        }
    }
}

这很有效

我将单引号修改为双引号,但问题很难是字符串插值问题;
mvn deploy:deploy file
是否与给定的url-s和cred一起工作?我可以用实际值切换变量,它工作得很好-整个想法是不要在build.gradle文件中使用实际字符串值-这根本不起作用。我假设我做错了什么,但需要弄清楚如何进一步调试。您是在哪里找到这些文档的?Gradle DSL参考难以搜索一些文档可在此处找到: