Gradle的Maven Publish插件未将POM或正确版本发布到Maven Local

时间:2018-07-10 14:26:03

标签: java gradle gradle-plugin maven-publish

我正在尝试让Gradle Maven Publish Plugin将Java库的快照版本发布到本地Maven存储库中,以便:

  1. jar的版本为1.0.0.SNAPSHOT-<timestamp>,其中<timestamp>是当前系统时间,以毫秒为单位(类似于 like System.currentTimeInMillis());和
  2. 我将发布的jar的全名登录到STDOUT /控制台,包括上面的版本;和
  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时:

  • 我确实看到jar部署到了~/.m2/repository/com/me/my-lib/,但是没有pom.xml并且没有附加1.0.0.SNAPSHOT版本
  • 我什至不知道如何/在哪里将时间戳附加到版本上
  • 我什至不知道如何println(...)来报告正在发布的罐子的全名

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

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

查看The Maven plugin documentation, specifically the Tasks section and the Installing to the local repository section,您可以运行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(如果需要其他内容,请参见here


所以我所有的build.gradle文件都看起来像这样:

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

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

install.doLast {
        println jar.archiveName
}