Военный файл Bazel имеет недопустимый каталог './'

Я могу экспортировать в файл .war из eclipse и запустить его на Tomcat. Однако, когда я создаю его с помощью Bazel, созданный файл .war не работает на Tomcat.

Структура проекта

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

Файл войны, экспортированный из eclipse (и работающий), выглядит так:

 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 с Bazel, я получаю следующее:

 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, чтобы получить файл войны с приведенным ниже кодом:

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, чтобы он не создавал каталог ./ в файле войны?


person Zeitgeist    schedule 01.09.2017    source источник
comment
Вы открыли исходный код этого правила? Мне было бы интересно использовать это.   -  person Benjamin Muschko    schedule 16.06.2019
comment
@BenjaminMuschko К сожалению, я этого не сделал.   -  person Zeitgeist    schedule 17.06.2019
comment
Есть ли шанс, что вы планируете опубликовать его как правило с открытым исходным кодом?   -  person Benjamin Muschko    schedule 18.06.2019
comment
@BenjaminMuschko Меня исключили из проекта почти на 2 года, так что на данный момент таких планов нет ...   -  person Zeitgeist    schedule 19.06.2019


Ответы (1)


Оказывается, проблема заключалась в команде, которую файл Bazel (я создал настраиваемое правило .bzl, подобное правилу appengine bazel) использует для архивирования файлов с помощью:

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

$ (Find.) Возвращал ./WEB-INF, поэтому, когда я изменил его на $ (find WEB-INF), он вернул файл .war без каталога './', который затем работал на Tomcat.

person Zeitgeist    schedule 08.09.2017