Gradle 使用maven发布任务时出现渐变错误

Gradle 使用maven发布任务时出现渐变错误,gradle,build.gradle,gradle-plugin,Gradle,Build.gradle,Gradle Plugin,我正在使用Gradle版本6.7.1,目前,在我的应用程序中,我面临着maven发布任务的问题 我们将发布任务保存在名为nexusgradle-1.0.5.Gradle的中心位置Gradle文件中,并通过apply from将其导入 中心位置Gradle nexusgradle-1.0.5.Gradle的内容如下所示,其中包含用于快照和发布的nexus repo信息,以及用于将人工制品推送到nexus的用户凭据 apply plugin: 'maven-publish' publishing

我正在使用Gradle版本6.7.1,目前,在我的应用程序中,我面临着maven发布任务的问题

我们将发布任务保存在名为nexusgradle-1.0.5.Gradle的中心位置Gradle文件中,并通过apply from将其导入

中心位置Gradle nexusgradle-1.0.5.Gradle的内容如下所示,其中包含用于快照和发布的nexus repo信息,以及用于将人工制品推送到nexus的用户凭据

apply plugin: 'maven-publish'

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.web
        }
   }
    repositories {
        maven {
            credentials {
                username 'uploader'
                password 'uploaderpassword'
            }
            println 'A message which is logged at QUIET level'
            name 'Nexus_Repo'
            def releasesRepoUrl = 'http://<hostname>/repository/<maven-releases>/'
            def snapshotsRepoUrl = 'http://<hostname>/repository/<maven-snapshots>/'
            url = project.version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
        }
    }
}
该任务将失败,因为发布任务将尝试将快照的人工制品推送到发布repo而不是快照repo


有人能告诉我,当把maven发布任务放在父Gradle文件中时,我犯了什么错误?为什么子级无法正确解析来自父级的值

问题在于您的URL设置:

def releasesRepoUrl = 'http://<hostname>/repository/<maven-releases>/'
def snapshotsRepoUrl = 'http://<hostname>/repository/<maven-snapshots>/'

您需要指定一个有效的URL,即主机名和maven版本,maven快照只是占位符,您应该自己定制以适应远程回购。

我找到了一种方法,通过添加

后评价

经过修改,它工作得很好。 这是正确的方法吗?还是有更好的方法

apply plugin: 'maven-publish'


afterEvaluate {project ->
publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.web
        }
   }
    repositories {
        maven {
            credentials {
                username 'uploader'
                password 'uploaderpassword!'
            }
            name 'Nexus_Repo'
              def releasesRepoUrl = 'http://<hostname>/repository/<maven-releases>/'
            def snapshotsRepoUrl = 'http://<hostname>/repository/<maven-snapshots>/'
            url = project.version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
        }
    }
}

}

我有一个用于发布和快照存储库的有效URL,仅用于查询中提供的占位符示例。
  > Configure project :
A message which is logged at QUIET level

> Task :clean UP-TO-DATE
> Task :bootBuildInfo

> Task :compileJava
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

> Task :generateGitProperties
> Task :processResources
> Task :classes
> Task :bootWar
> Task :war
> Task :assemble
> Task :check
> Task :build
> Task :generateMetadataFileForMavenJavaPublication
> Task :generatePomFileForMavenJavaPublication
> Task :publishMavenJavaPublicationToNexus_RepoRepository FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':publishMavenJavaPublicationToNexus_RepoRepository'.
> Failed to publish publication 'mavenJava' to repository 'Nexus_Repo'
   > Could not PUT 'http://<hostname>/repository/maven-releases/com/package/appname/1.0.9-SNAPSHOT/maven-metadata.xml'. Received status code 400 from server: Repository version policy: RELEASE does not allow metadata in path: com/package/appname/1.0.9-SNAPSHOT/maven-metadata.xml

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org
> Configure project :
A message which is logged at the QUIET level

> Task :clean UP-TO-DATE
> Task :bootBuildInfo

> Task :compileJava
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

> Task :generateGitProperties
> Task :processResources
> Task :classes
> Task :bootWar
> Task :war
> Task :assemble
> Task :check
> Task :build
> Task :generateMetadataFileForMavenJavaPublication
> Task :generatePomFileForMavenJavaPublication
> Task :publishMavenJavaPublicationToNexus_RepoRepository
> Task :publish

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.7.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 29s
10 actionable tasks: 9 executed, 1 up-to-date
def releasesRepoUrl = 'http://<hostname>/repository/<maven-releases>/'
def snapshotsRepoUrl = 'http://<hostname>/repository/<maven-snapshots>/'
apply plugin: 'maven-publish'


afterEvaluate {project ->
publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.web
        }
   }
    repositories {
        maven {
            credentials {
                username 'uploader'
                password 'uploaderpassword!'
            }
            name 'Nexus_Repo'
              def releasesRepoUrl = 'http://<hostname>/repository/<maven-releases>/'
            def snapshotsRepoUrl = 'http://<hostname>/repository/<maven-snapshots>/'
            url = project.version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
        }
    }
}

}