Gradle - java插件中的jar文件名
Posted
技术标签:
【中文标题】Gradle - java插件中的jar文件名【英文标题】:Gradle - jar file name in java plugin 【发布时间】:2011-10-09 17:51:52 【问题描述】:我第一次尝试使用 Gradle。我正在尝试使用 maven java 项目来编译和创建 jar 文件。它正在编译和创建 build/libs 目录中的 jar 文件为
主干-XXXVERSION-SNAPSHOT.jar
我正在从这个 maven java 项目的主干目录运行 gradle 构建文件。
我想在jar文件名中获取项目名称(例如:project1),类似于
project1-XXXVERSION-SNAPSHOT.jar
在 build/libs 目录中。 请提出建议。
【问题讨论】:
注意,如果您使用 Spring Boot,您可能需要mind thebootJar
task instead。
【参考方案1】:
目录结构如下:
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。
另外,尝试设置:
archivesBaseName = 'project1'
或(已弃用):
jar.baseName = 'project1'
【讨论】:
只是为了保持讨论的完整性:第一个版本确实有效,它还可以生成正确的 zip、maven 档案等。我也觉得它更优雅。我将编辑我的答案以提供完整的脚本。 是的,这也有效,但我没有看到存储库中生成的 POM 和 JAR。在声明“存储库”后,我正在使用“uploadArchives”将其发布到 maven artifactory。 archivesBaseName 有效,但 jar.baseName 可能会出现问题,因为您的源 jar 可能未正确命名。 baseName 已被弃用(Gradle 6.2):docs.gradle.org/6.2.2/dsl/… 它已被 archivesBaseName 取代。 在 kotlin 中,archiveBaseName 是project.base.archivesBaseName
,从 gradle 6.2 开始【参考方案2】:
默认项目名称取自存储项目的目录。您应该为构建正确设置项目名称,而不是显式更改 jar 的命名。目前这在build.gradle
文件中是不可能的。相反,您必须在根目录中创建一个settings.gradle
文件。这个settings.gradle
文件应该包含这一行:
rootProject.name = 'project1'
【讨论】:
非常感谢您的解决方案。它对我有用。还发现我们可以对 jar 使用“doFirst”,它也可以。那么实现这一目标的最佳方法是什么。 “我们可以将 doFirst 用于 jar”是什么意思? jar 是一个“普通”的 gradle 任务,可以通过 doLast 和 doFirst 使用自定义操作闭包来增强它。 使用这个 sn-p 还可以确保您的其他 zip、maven 档案等具有正确的命名,因为它们都取决于您的项目名称 @koppor project.name 在 build.gradle 中是只读的很长一段时间。如前所述,您必须使用如上所示的 settings.gradle 文件来更改项目名称。 @DaniloTommasina 您可以在单个settings.gradle
文件中为根项目和每个子项目指定项目的名称。【参考方案3】:
我最近迁移到 gradle 4.6(从 3.something)和
jar
baseName = 'myjarname'
停止工作,gradle 根据文件夹名称命名我的 jar。
所以我切换到了archivesBaseName = 'myjarname'
,它可以工作。
也许这对其他人也有帮助。
【讨论】:
【参考方案4】:如果你有一些 submobule,你可以在 build.gradle (for 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
的末尾,但不起作用。
至少在 Kotlin DSL 中这是可行的。我已经调整了解决方案。【参考方案6】:
目前使用 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
的东西
【讨论】:
【参考方案7】:如果您使用较新的 Gradle 版本,baseName
、archiveName
现在将被弃用。相反,使用类似的东西
jar
archivesBaseName = 'project1'
archiveVersion = '1.0-SNAPSHOT'
【讨论】:
【参考方案8】:如果你想在 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
【讨论】:
【参考方案9】:您必须删除 build.gradle 文件中的“版本”标签!
【讨论】:
以上是关于Gradle - java插件中的jar文件名的主要内容,如果未能解决你的问题,请参考以下文章
没有可执行jar的Spring Boot 2 Gradle插件
Android Gradle 插件Gradle 依赖管理 ⑧ ( implementation fileTree 引入jar文件依赖 | implementation files 引入文件依赖 )
使用 Palantir Gradle 插件构建 Docker 容器时找不到 .jar 文件
想要使用 Gradle 将 repo 中的 .ebextensions (AWS Beanstalk) 目录复制到 Java jar 文件的根目录中
Android Gradle 插件Gradle 构建机制 ① ( 空白工程 Gradle 构建文件 | IntelliJ IDEA 工程构建文件 | Android Studio 工程构建文件 )