Gradle 的 Maven Publish 插件未将 POM 或正确版本发布到 Maven Local
Gradle's Maven Publish plugin not publishing POM or proper version to Maven Local
我正在尝试让 Gradle Maven Publish Plugin 将我的 Java 库的快照版本发布到我的本地 Maven 存储库,这样:
- jar 的版本是
1.0.0.SNAPSHOT-<timestamp>
,其中 <timestamp>
是以毫秒为单位的当前系统时间(类似于 like System.currentTimeInMillis()
);和
- 我登录到STDOUT/console发布的jar的全名,包括上面的版本;和
- 格式正确的 pom.xml 与 jar 一起发布到 Maven 本地,以便任何其他 Gradle/Maven 项目可以在本地 "pull it down" 并正确获取其传递依赖项
迄今为止我最好的尝试:
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
版本
- 我什至不知道how/where我会在版本上附加时间戳
- 我什至不知道how/where我会做一个
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
}
我正在尝试让 Gradle Maven Publish Plugin 将我的 Java 库的快照版本发布到我的本地 Maven 存储库,这样:
- jar 的版本是
1.0.0.SNAPSHOT-<timestamp>
,其中<timestamp>
是以毫秒为单位的当前系统时间(类似于 likeSystem.currentTimeInMillis()
);和 - 我登录到STDOUT/console发布的jar的全名,包括上面的版本;和
- 格式正确的 pom.xml 与 jar 一起发布到 Maven 本地,以便任何其他 Gradle/Maven 项目可以在本地 "pull it down" 并正确获取其传递依赖项
迄今为止我最好的尝试:
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
版本 - 我什至不知道how/where我会在版本上附加时间戳
- 我什至不知道how/where我会做一个
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
}