首页 > 解决方案 > Gradle 的 Maven 发布插件未将 POM 或正确版本发布到 Maven 本地

问题描述

我正在尝试让 Gradle Maven 发布插件将我的 Java 库的快照版本发布到我的本地 Maven 存储库,这样:

  1. jar 的版本是,当前系统时间在1.0.0.SNAPSHOT-<timestamp>哪里(以毫秒为单位)(类似于类似的东西);和<timestamp> System.currentTimeInMillis()
  2. 我登录到 STDOUT/console 正在发布的 jar 的全名,包括上面的版本;和
  3. 格式正确的 pom.xml 与 jar 一起发布到本地 Maven,以便任何其他 Gradle/Maven 项目可以在本地“拉下”并正确获取其传递依赖项

到目前为止我最好的尝试:

plugins {
    id 'java-library'
    id 'maven-publish'
}

dependencies {
    compile(
        'org.hibernate:hibernate-core:5.0.12.Final'
        ,'com.fasterxml.jackson.core:jackson-core:2.8.10'
        ,'com.fasterxml.jackson.core:jackson-databind:2.8.10'
        ,'com.fasterxml.jackson.core:jackson-annotations:2.8.0'
    )

    testCompile(
        'junit:junit:4.12'
    )
}

repositories {
    jcenter()
    mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8
group 'com.me'

jar {
    baseName = 'my-lib'
    version = '1.0.0-SNAPSHOT'
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}

但是,使用此设置,当我运行时./gradlew publishToMavenLocal

有任何想法吗?

标签: javagradlegradle-pluginmaven-publish

解决方案


关于#3,要将您的工件安装到本地存储库,您不需要maven-publish插件,而是maven插件

请参阅Maven 插件文档,特别是任务部分和安装到本地存储库部分,您可以运行gradle clean build install

像这样简单的 build.gradle 文件对我有用

version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'maven'

注意,如果您需要发布默认生成的 jar 以外的其他内容,则需要更改archives配置


关于#1附加时间戳,将版本行移到 jar 子句之外并将其更改为

version = '1.0.0-SNAPSHOT'

version = "1.0-SNAPSHOT-${System.currentTimeMillis()}"

这是使用 Groovy GString (AKA 字符串插值 -注意从单引号到双引号的变化)将当前时间(以毫秒为单位)附加到版本


最后但并非最不重要的一点是,关于#2打印 jar 全名,请将以下内容附加到 build.gradle 文件中

install.doLast {
        println jar.archiveName
}

本质上,我们在安装任务(在我的答案顶部执行的那个)附加了一个 jar 配置的 archiveName 的 println(如果你想要别的东西,请参见这里)


所以总而言之,我的 build.gradle 文件看起来像这样:

group 'com.boazj'
version "1.0-SNAPSHOT-${System.currentTimeMillis()}"

apply plugin: 'java'
apply plugin: 'maven'

install.doLast {
        println jar.archiveName
}

推荐阅读