Gradle-Java插件中的jar文件名


70

我第一次尝试Gradle。我正在尝试使用Maven Java项目来编译和创建jar文件。它正在build / libs目录中编译并创建jar文件,如下所示:

树干-XXXVERSION-SNAPSHOT.jar

我正在从这个Maven Java项目的主干目录运行gradle构建文件。

我想在jar文件名中获取项目名称(例如:project1),类似

project1 -XXXVERSION-SNAPSHOT.jar

在build / libs目录中。请提出建议。


1
请注意,如果您使用Spring Boot,则可能需要注意该bootJar任务
acdcjunior

Answers:


59

默认项目名称取自存储项目的目录。与其显式更改jar的命名,不如为您的构建设置正确的项目名称。目前,在build.gradle文件中这是不可能的。相反,您必须settings.gradle在根目录中创建一个文件。此settings.gradle文件应包含此衬纸:

rootProject.name = 'project1'

非常感谢您的解决方案。它为我工作。还发现我们可以对jar使用'doFirst'并且它也起作用。那么什么是实现这一目标的最佳方法。
Chakri

“我们可以将doFirst用于jar”是什么意思?jar是一个“正常”的gradle任务,可以通过doLast和doFirst通过自定义操作关闭来增强。
Rene Groeschke,2011年

使用此代码段还可以确保您的其他zip,maven归档文件等具有正确的命名,因为它们都取决于您的项目名称
Rene Groeschke 2011年

3
@koppor project.name在build.gradle中只读很长时间。如前所述,您必须使用上面显示的settings.gradle文件来更改项目名称。
Rene Groeschke

1
@DaniloTommasina您可以在单个settings.gradle文件中为根项目和每个子项目指定项目名称。
卢卡斯·科尔弗(LukasKörfer)'18年

116

尝试设置:

archivesBaseName = 'project1'

要么

jar.baseName = 'project1'

这是完整的解决方案:

trunk
˪ build
  ˪ libs
    ˪ project1-1.0-SNAPSHOT.jar 
˪ build.gradle

build.gradle是:

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

archivesBaseName = 'project1'
version = '1.0-SNAPSHOT'
group = 'example'

它会生成正确的ZIP,POM和JAR。


为了使讨论更完整:第一个版本确实有效,并且还可以生成正确的zip,maven存档等。我觉得它也更优雅。我将编辑我的答案以提供完整的脚本。
Artur Nowak

是的,这也可以,但是在存储库中看不到生成的POM和JAR。我在声明“存储库”后使用“ uploadArchives”将其发布到Maven工件。
Chakri

1
archivesBaseName可以使用,但是jar.baseName可能会出现问题,因为您的源jar可能命名不正确。
opticyclic 2014年

1
baseName已弃用(第6.2版):docs.gradle.org/6.2.2/dsl/…已由archivesBaseName代替。
ezzadeen

在kotlin中,从gradle project.base.archivesBaseName6.2开始,archiveBaseName为
slycrel

23

我最近迁移到gradle 4.6(从3.开始),并且

jar {
    baseName = 'myjarname'
}

停止工作,gradle从文件夹名称中命名了我的jar。

所以我切换到archivesBaseName = 'myjarname'哪个工作。

也许这也对其他人有帮助。


14

如果您有一些子级分子,则可以在build.gradle中使用(用于jar)

configurations {
    jar.archiveName = 'submodule-jar.jar'
}

5

在Kotlin DSL中,您还可以使用:

tasks.jar {
    archiveFileName.set("app.jar")
}

通过Spring boot和Kotlin DSL,您可以使用:

tasks {
    bootJar {
        archiveFileName.set("app.jar")
    }
}

在Spring Boot上,将此添加到末尾build.gradle但不起作用。
e-info128

至少在Kotlin DSL中有效。我已经适应了解决方案。
mrclrchtr

1

当前使用Kotlin作为Gradle DSL。以下语句对我有用:

tasks.withType<AbstractArchiveTask> {
    setProperty("archiveFileName", "hello-world.jar")
}

它也适用于Spring Boot可执行jar。

如果要保留版本号:

tasks.withType<AbstractArchiveTask> {
    setProperty("archiveBaseName", "hello-world")
}

它将产生类似 hello-world-1.2.3.jar


0

如果要将日期附加到jar文件名中,可以这样进行:

jar {
    baseName +='_' +new java.text.SimpleDateFormat("dd_MM_yyyy").format(new java.util.Date())
    println(baseName) // just to verify

导致 <basename>_07_05_2020.jar


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.