Может ли Maven упаковать WAR как .tar.gz? - PullRequest
1 голос
/ 24 октября 2019

Я создаю WAR-приложение в Maven, и мне нужно развернуть его в Docker. Проблема в том, что докер не поддерживает формат zip (но может использовать .tar.gz или .tar.xz).

Итак, как мне упаковать мой mywebapp-1.0.0.war как mywebapp-1.0.0.tar.gz?

У нас есть это требование, так что было бы проще выполнить этапы усиления для образа докера.

Я попытался использовать плагин Assembly, и он выдает target/mywebapp-1.0.0.tar.gz. Тем не менее, он заканчивает тем, что помещает весь WAR-файл в файл .tar.gz, а НЕ его содержимое. Вот мой assembly.xml файл:

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0
                      http://maven.apache.org/xsd/assembly-2.0.0.xsd">
  <id>distribution</id>
  <formats>
    <format>tar.gz</format>
  </formats>
  <fileSets>
    <fileSet>
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>target/mywebapp-1.0.0.war</include>
      </includes>
    </fileSet>
  </fileSets>
</assembly>

1 Ответ

1 голос
/ 24 октября 2019

Хотя я нахожу это требование странным (сервер приложений должен распаковывать вашу войну, а не вы), я полагаю, что это возможно, запустив каталог в target, который используется для создания войны.

Перед этапом упаковки все файлы для войны собраны в каталоге чуть ниже цели (я забыл имя, но это должно быть легко для обратного инжиниринга) - просто упакуйте этот каталог, используя плагин сборки.

Редактирование ОП:

Я хотел принять этот ответ, но также хотел, чтобы он был полезен для кого-то другого, поэтому я добавил рабочее решение (assembly.xml файл). Вот оно:

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0
    http://maven.apache.org/xsd/assembly-2.0.0.xsd">
  <id>docker</id>
  <formats>
    <format>tar.gz</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <fileSets>
    <fileSet>
      <directory>target/${project.build.finalName}</directory>
      <outputDirectory>.</outputDirectory>
    </fileSet>
  </fileSets>
</assembly>

Это решение генерирует файл target/mywebapp-1.0.0-docker.tar.gz в дополнение к типичному военному файлу.

Обратите внимание, что добавлен классификатор docker.

...