如何在lein-ring生成的uberwar中添加META-INF/context.xml
解决lein-ring生成uberwar时在根目录META-INF放置context.xml的问题
我之前也碰到过这种遗留系统的特殊要求,下面给你两个实用的解决方案,都能帮你把context.xml放到war包根目录的META-INF下:
方案一:通过war资源目录统一管理
这个方法适合需要添加多个war根目录资源的场景,步骤很清晰:
- 在项目根目录新建一个名为
war-resources的文件夹 - 在这个文件夹内创建
META-INF子文件夹,把你的context.xml文件放进这个子文件夹 - 修改
project.clj里的:ring配置块,添加:war-resources-path指定这个目录:
(defproject your-project "1.0.0" ;; 你的其他项目配置(依赖、资源路径等) :ring {:handler your-project.handler/app :war-resources-path "war-resources"})
当你运行lein ring uberwar时,war-resources目录下的所有内容都会被直接复制到war包的根目录,这样context.xml就会出现在/META-INF/context.xml的位置。
方案二:直接指定单个文件映射
如果只需要添加context.xml这一个文件,用这个方法更简洁,不需要额外创建目录:
- 找到你本地
context.xml文件的路径(比如放在项目根目录,或者resources文件夹下) - 修改
project.clj的:ring配置,在:war-options里添加:extra-files映射:
(defproject your-project "1.0.0" ;; 你的其他项目配置 :ring {:handler your-project.handler/app :war-options {:extra-files {"/META-INF/context.xml" "./context.xml"}}})
这里的"./context.xml"是你本地文件的相对路径,根据实际位置调整即可(比如如果文件在src/main/resources下,就写"src/main/resources/context.xml")。
运行lein ring uberwar后,指定的文件就会被放到war包根目录的META-INF文件夹里,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Psetmaj
相关产品推荐
相关产品推荐

