[spring-projects/spring-boot]更轻松地将 bootArchives 配置中的工件安装到本地 Maven 存储库中

2024-04-23 443 views
0

Gradle 4.7,Boot插件v2.0.2.RELEASE,使用Maven插件发布

要自定义工件的名称,需要执行以下操作:

jar {
    archiveName "citylist-builder.jar"
}
bootJar {
    archiveName "citylist-builder.jar"
}

如果上述配置不匹配,./gradlew clean build install则会失败并显示如下消息:

* What went wrong:
Execution failed for task ':my-project:install'.
> Could not publish configuration 'archives'
   > Cannot publish artifact '<archiveName in bootJar>.jar' (/path/to/my-project/build/libs/my-project-2.11.0-beta-SNAPSHOT.jar) as it does not exist.

由于boorJar任务的类型是Jar,我们不需要重复配置。

回答

4

Maven 插件的install任务是将配置中的存档安装archives到本地 Maven 存储库中。默认情况下,这是任务创建的工件jar。通过配置两者jarbootJar使用相同的名称,您可以欺骗 GradlebootJar在它认为正在安装由任务创建的工件时安装由任务创建的工件jar。这是有问题的,因为install取决于jar任务但不取决于bootJar任务。

Boot 的 Gradle 插件使用名为bootArchives.默认情况下,它将包含任务创建的工件bootJar。如文档中所述,任务uploadBootArchives会自动创建。我们应该对bootInstall任务做类似的事情。

0

您可以bootInstall通过将以下内容添加到项目的来配置任务build.gradle

task bootInstall(type: Upload) {
    configuration = project.configurations.bootArchives
    // Install to the local Maven repository
    repositories.mavenInstaller()
    // It's a fat jar. Clear the scope mappings so that the pom has no dependencies
    repositories.withType(MavenResolver.class) { resolver ->
        resolver.pom.scopeMappings.mappings.clear()
    }
}
4

install 依赖于 jar 任务,但不依赖于 bootJar 任务。

设置显式依赖项(在我的项目中)而不是bootInstall像这样创建任务不是更容易吗

install.dependsOn(bootJar)

文档说该jar任务被启动插件禁用。

我用它install作为示例,因为这就是构建当前失败的地方,但从你所说的来看,我认为发布到远程存储库也会遇到同样的问题。

6

设置显式依赖项(在我的项目中)而不是创建 bootInstall 任务不是更容易吗

不完全是,不。bootJar当 Gradle 认为它正在上传由生成的工件时,您仍然在欺骗 Gradle 上传由 生成的工件jar

我认为发布到远程仓库也会有同样的问题。

我认为不会。已经有一个uploadBootArchives上传配置内容的任务bootArchives。我在上面链接的文档中对此进行了描述。

4

但是,除非我保留两个罐子,即原始罐子和胖罐子,否则创建新任务bootInstall不会起作用。gradle install

5

你不应该使用gradle install.其记录的目的是在配置中安装工件archives,正如我上面所解释的,生成的工件bootJar是配置的一部分bootArchives。我上面显示的任务bootInstall将从配置中安装工件bootArchives

2

它对我不起作用(我有一些额外的行李)。我必须创建一个示例项目并进行报告。

8

如果您希望我们查看此问题,请提供所需的信息。如果在接下来的 7 天内未提供信息,此问题将被关闭。

0

由于缺乏所需的反馈而关闭。如果您希望我们查看此问题,请提供所需的信息,我们将重新打开该问题。

9

尽管缺乏反馈,我仍然认为这是值得做出的改变。然而,如果知道为什么它显然不适用于@asarkar,那还是很高兴的。

1

@wilkinsona 由于其他一些高优先级工作,我不得不将其搁置,因此没有时间进一步研究它。对于那个很抱歉。我预计几周后就能把它捡起来。

1

你好,我有同样的问题。对于这种情况,推荐的解决方案是什么?

5

好的,现在我只是启用了jar任务来使事情正常进行。如果jar和生成的存档名称bootJar相同,则需要将classifier属性添加到 或jarbootJar如文档中所述或更改archiveName属性。

1

Gradle 的maven插件已被弃用,因此maven-publish我认为我们不应该对maven插件集成进行任何更改。