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

标签 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/console,包括上面的版本;和
  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(...)报告正在发布的 jar 的全名

有什么想法吗?

最佳答案

关于#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(又名字符串插值 - 注意从单引号到双引号的变化)将以毫秒为单位的当前时间附加到版本


最后但同样重要的是,关于#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
}

关于java - Gradle 的 Maven Publish 插件未将 POM 或正确版本发布到 Maven Local,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51267798/

相关文章:

java - log4j :ERROR Could not parse url [file://. ../mda/log4j.xml]

java - 如何在 spring 中将属性设置为 WEB-INF 中的路径名?

gradle - 如何让 IntelliJ 识别 gradle 生成的源目录?

java - spring-boot-gradle-plugin 是否随 spring-boot 版本一起移动?

javascript - 如何从 MVC Controller 类调用引导模式

java - 如何在 java 或 php 中解析一个非常大的 xml 文件并插入到 mysql 数据库中

java - gradle在不相关的不同项目之间共享属性

java - Gradle 构建错误 java.lang.IllegalArgumentException

gradle - 如何为整个 Gradle 多模块项目只定义一次依赖版本?

Gradle 自定义任务选项没有值