java - Gradle 的 Maven 发布插件未将 POM 或正确版本发布到 Maven 本地
问题描述
我正在尝试让 Gradle Maven 发布插件将我的 Java 库的快照版本发布到我的本地 Maven 存储库,这样:
- jar 的版本是,当前系统时间在
1.0.0.SNAPSHOT-<timestamp>
哪里(以毫秒为单位)(类似于类似的东西);和<timestamp>
System.currentTimeInMillis()
- 我登录到 STDOUT/console 正在发布的 jar 的全名,包括上面的版本;和
- 格式正确的 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
插件
请参阅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
}
推荐阅读
- java - 从 xml 文件加载二维数组
- python - 如何在我的农场命令中插入变量 - Discord.py
- kotlin - 如何使用 kotlin 在其他类中调用按钮
- c# - 在 C# 异步和等待全局变量崩溃
- java - 如何在服务中的数组中保存位置数据并将该数组发送到活动/片段?[安卓/Java]
- dictionary - 如何使用字典在python中创建多维结构数组
- django - 在 Django 中的 ModelForm 中更新/更改当前用户实例的信息
- c# - 获取错误作为@Parameter1 不是过程的参数
- angular - openlayers 地图未显示在我的应用程序中,尽管它似乎已正确加载
- angular - Angular 11 SSR 已编译,但 prod 构建和服务出现问题,浏览器中未显示任何内容