【发布时间】:2017-09-01 14:34:02
【问题描述】:
我能够从 Eclipse 导出到 .war 文件并在 Tomcat 上运行它。但是,当我使用 Bazel 构建它时,生成的 .war 文件无法在 Tomcat 上运行。
项目结构
project
|_src
| |_main/java/*.java
|
|_WebContent
|_META-INF
|_Manifest.mf
|_WEB-INF
|_lib/*.jar
|_web.xml
从 Eclipse 导出的 War 文件(并且正在运行)如下所示:
inflated: META-INF/MANIFEST.MF
inflated: .DS_Store
created: META-INF/
created: WEB-INF/
created: WEB-INF/classes/
created: WEB-INF/classes/main/
created: WEB-INF/classes/main/java/
inflated: WEB-INF/classes/main/java/.DS_Store
inflated: WEB-INF/classes/main/java/foo.class
inflated: WEB-INF/classes/main/.DS_Store
inflated: WEB-INF/classes/.DS_Store
inflated: WEB-INF/.DS_Store
created: WEB-INF/lib/
inflated: WEB-INF/lib/.DS_Store
inflated: WEB-INF/lib/jersey-bundle-1.19.jar
inflated: WEB-INF/web.xml
当我用 Bazel 创建一个 .war 时,我得到了这个:
created: ./
created: ./WEB-INF/
created: ./WEB-INF/classes/
created: ./WEB-INF/classes/main/
created: ./WEB-INF/classes/main/java/
inflated: ./WEB-INF/classes/main/java/.DS_Store
inflated: ./WEB-INF/classes/main/java/foo.class
created: ./WEB-INF/lib/
inflated: ./WEB-INF/lib/jersey-bundle-1.19.jar
inflated: ./WEB-INF/web.xml
我正在自定义 .bzl 文件以使用以下代码获取 war 文件:
def _war_impl(ctxt):
zipper = ctxt.file._zipper
data_path = ctxt.attr.data_path
war = ctxt.outputs.war
build_output = war.path + ".WEB-INF"
print("build_output = %s" % (build_output))
cmd = [
"set -e;rm -rf " + build_output,
"mkdir -p %s" % build_output
]
inputs = ctxt.files.jars + [zipper]
cmd += ["mkdir -p %s/WEB-INF/lib" % build_output]
cmd += ["mkdir -p %s/WEB-INF/classes/main/java" % build_output]
谁能指出如何使用 'mkdir' 进行构建,这样它就不会在 war 文件中创建 './' 目录?
【问题讨论】:
-
这条规则你开源了吗?我有兴趣使用它。
-
@BenjaminMuschko 不幸的是我没有。
-
您是否打算将其作为开源规则发布?
-
@BenjaminMuschko 我已经从项目中移除了将近 2 年,所以目前还没有这样的计划......