2017-09-01 71 views
0

我可以从eclipse导出到.war文件并在Tomcat上运行。但是,当我使用Bazel构建它时,生成的.war文件不会在Tomcat上运行。Bazel war文件的无效'./'目录

项目结构从日食(和工作)出口

project 
|_src 
| |_main/java/*.java 
| 
|_WebContent 
     |_META-INF 
      |_Manifest.mf 
     |_WEB-INF 
      |_lib/*.jar 
      |_web.xml 

战争文件看起来像这样:

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 

当我创建巴泽勒一个.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文件中建立“./”目录?

回答

0

原来的问题是在巴泽尔文件的命令(我创建了一个自定义的.bzl排除类似的AppEngine巴泽尔规则)用来压缩的文件将用:

def _make_war(zipper, input_dir, output): 
    return [ 
     "(root=$(pwd);" + 
     ("cd %s &&" % input_dir) + 
     ("${root}/%s Cc ${root}/%s $(find .))" % (zipper.path, output.path)) 
     ] 

的$(找到。 )正在返回./WEB-INF,所以当我将其更改为$(查找WEB-INF)时,它返回了一个不带'./'目录的.war文件,然后运行在Tomcat上。