【问题标题】:gradle spring boot project: How to rename files in war?gradle spring boot 项目:如何在战争中重命名文件?
【发布时间】:2019-02-10 13:25:49
【问题描述】:

我正在使用 Spring Boot 构建一个 Web 应用程序。 我想在 final 中更改一些 WEB-INF/lib/*.jars 的名称。

如果我正确理解文档,这应该使用 spring-boot-gradle-plugin 提供的 bootWar 任务(标准战争任务的子类)的“重命名”方法来工作。

但是“重命名”方法根本不会执行,即如果我将它添加到我的 build.gradle:

   bootWar {
      rename { name ->
        println "***** " + name
        name
    }

那么什么都不会被打印出来。采用原始模式和替换模式的“重命名”方法重载也不起作用。

我用一个示例项目进行了尝试,但它也没有在那里工作:

  • 使用带有“Web”依赖的 Spring Initializr 创建一个新项目
  • apply plugin: 'java' 更改为apply plugin: 'war'
  • 从上方添加bootWar 配置

【问题讨论】:

    标签: spring-boot gradle


    【解决方案1】:

    您需要在bootWar.rootSpec 上调用rename 方法,如下所示:

    bootWar {
        rootSpec.rename { name ->
            println "***** " + name
            name
        }
    }
    

    然后你就可以重命名你需要的库了:

    > Task :bootWar
    ***** MANIFEST.MF   
    ***** spring-boot-starter-web-2.0.4.RELEASE.jar 
    ***** spring-boot-starter-aop-2.0.4.RELEASE.jar 
    ***** spring-boot-starter-2.0.4.RELEASE.jar
    ( ...)
    

    我不知道其中的原因,但是来自War 任务的rename 闭包将仅应用于位于您项目的src/main/webapp 目录下的资源,而不是其他资源(如依赖项)。您可以通过创建一个虚拟资源src/main/webapp/foo.txt 来确认这一点并执行您的测试脚本:

    $ ./gradlew bootWar
    
    > Task :bootWar
    ***** foo.txt
    

    【讨论】:

    • 非常感谢您的回答!出于好奇:我在哪里可以通过 RTFM 找到有关“rootSpec”的信息?我在 gradle api 文档中的任何地方都找不到该属性。
    • 战争任务继承自 AbstractCopyTask:rootSpec 属性在此级别处理,请参见此处:docs.gradle.org/current/javadoc/org/gradle/api/tasks/…。但是很遗憾,您不会在那里找到有关使用此“rootSpec”的太多信息。
    • 使用archiveName不是更容易吗(在bootWar任务中)
    • @AnanthaSharma archiveName 控制生成的 war 存档文件的名称。这里的问题是关于生成的war中包含的jar文件的名称
    猜你喜欢
    • 2018-07-05
    • 2017-12-03
    • 2016-12-24
    • 1970-01-01
    • 2019-01-10
    • 2018-03-12
    • 2019-03-23
    • 2023-03-14
    • 2020-10-30
    相关资源
    最近更新 更多