Gradle War任务:如何将指定路径下的特定文件打包至.war包中
解决方案:Gradle多模块项目中自定义WAR包内容(适配Thymeleaf路径需求)
我完全懂你的情况——因为Thymeleaf对WEB-INF路径的处理不符合预期,你必须把web模块的webAppDirName硬设为src/main/resources,现在需要把指定路径下的特定文件也打包进最终的WAR包对吧?
下面是调整后的完整Gradle配置,既保留了你原有的核心设置,又完美实现了自定义文件打包的需求:
apply plugin: 'war' // 假设这是你定义的其他依赖模块列表 def exportedProjects = [':module-a', ':module-b', ':thymeleaf-02-web'] def warBaseName = "my-web-application" project(':thymeleaf-02-web') { description 'Web (HTML, JS, CSS)' dependencies { exportedProjects.each { if ("$it" != ":thymeleaf-02-web") compile project("$it") } } webAppDirName = 'src/main/resources' // 硬性要求,适配Thymeleaf路径逻辑 war { version = '' baseName = warBaseName // 在这里添加你的自定义文件打包规则,下面是几个常用示例: // 示例1:把src/main/static下的所有文件打包到WAR包的static根目录 from 'src/main/static' { into 'static' } // 示例2:把项目根目录下的docs/api文件夹,打包到WAR的WEB-INF/docs/api路径下 from "${rootProject.projectDir}/docs/api" { into 'WEB-INF/docs/api' } // 示例3:只打包src/custom-resources下的.html和.json文件,放到WAR的resources目录 from 'src/custom-resources' { include '**/*.html', '**/*.json' into 'resources' } } }
关键配置说明:
from:指定要引入的源文件/目录,可以是当前模块的相对路径,也可以用rootProject.projectDir引用根项目的绝对路径into:设置这些文件在最终WAR包中的存放位置,完全自定义路径include/exclude:精准过滤文件,比如只打包特定后缀的文件,或者排除某些不需要的文件
如果你的需求更复杂(比如根据环境变量决定是否打包某些文件),还可以在from块里加入条件判断,Gradle的灵活性完全能满足你的定制化需求。
内容的提问来源于stack exchange,提问作者Manuel Jordan
相关产品推荐
相关产品推荐

