Создание zip-архива целевого каталога maven

Я хочу создать zip-архив моего «целевого» каталога (${project.build.directory). использование плагина maven-assembly-plugin кажется мне излишним для такой простой задачи (и немного сложной - почему я должен использовать другой файл, дескриптор сборки, для такой задачи) я не могу найти, казалось бы, более простой maven-zip-plugin в http://repo1.maven.org/maven2 репозиторий.

Любой вклад?


person Yaneeve    schedule 25.03.2010    source источник
comment
jeejava.com/zip-file-using-maven-assembly-plugin/   -  person user3470953    schedule 02.09.2019


Ответы (2)


Если предопределенный дескриптор сборки bin не удовлетворить ваши потребности, то у вас есть три варианта:

  1. Использование плагина maven-assembly-plugin. Плагин maven-zip-plugin так и не вышел, потому что плагин сборки может делать все, что делал плагин zip, и даже больше, см. MNG-2243.
  2. Используя maven-antrun-plugin (и, возможно, build-helper-plugin для прикрепления zip) — есть пример здесь (и это выглядит более многословно, чем плагин сборки в конце).
  3. Написание собственного плагина — зачем вам это делать, когда у вас есть плагин для сборки.

Лично я бы просто использовал maven-assembly-plugin со следующим дескриптором zip.xml:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
  <id>bin</id>
  <baseDirectory>/</baseDirectory>
  <formats>
    <format>zip</format>
  </formats>
  <fileSets>
    <fileSet>
      <directory>${project.build.directory}</directory>
    </fileSet>
  </fileSets>
</assembly>

И в вашем POM:

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.6</version>
  <configuration>
    <descriptors>
      <descriptor>src/main/assembly/zip.xml</descriptor>
    </descriptors>
  </configuration>
  <executions>
    <execution>
      <id>make-assembly</id> <!-- this is used for inheritance merges -->
      <phase>package</phase> <!-- append to the packaging phase. -->
      <goals>
        <goal>single</goal> <!-- goals == mojos -->
      </goals>
    </execution>
  </executions>
</plugin>
person Pascal Thivent    schedule 25.03.2010
comment
Не работает - используется встроенный бин. И я не могу понять, как указать на пользовательский не встроенный. - person Ondra Žižka; 11.07.2013
comment
Существует одно преимущество использования плагина antrun по сравнению с плагином сборки, так как он по-разному сохраняет размеры файлов внутри zip. Если вы читаете zip с помощью «ZipInputStream» и используете «getSize()», вы получите размер записи с zip, созданными antrun, для zip, созданных с помощью сборки, он возвращает -1. - person Nick Wilson; 16.09.2016

Если у вас нет особых потребностей в сгенерированном ZIP-файле, вы можете использовать один из предопределенных дескрипторов Maven Assembly. Предопределенные дескрипторы сборок упрощают быстрое и простое создание конкретных сборок без необходимости указывать собственный дескриптор сборки. Предположим, вы хотите использовать предопределенный дескриптор bin. Затем в разделе plugins раздела build вашего POM вы можете просто добавить следующее.

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.6</version>
  <configuration>
    <descriptorRefs>
      <descriptorRef>bin</descriptorRef>
    </descriptorRefs>
  </configuration>
</plugin>

Конечно, как всегда с Maven, если вы хотите сделать что-то помимо конфигурации по умолчанию, вам придется создать свою собственную конфигурацию, и в данном случае это означает ваш собственный дескриптор сборки.

Список предопределенных дескрипторов задокументирован здесь.

person RTBarnard    schedule 25.03.2010
comment
Не плохие варианты. Тем не менее, в конце моего процесса целевой каталог просто содержит exe-файл и каталог с другими exe-файлами - все linstallers. Я просто хочу застегнуть их все вместе - person Yaneeve; 25.03.2010
comment
Итак, ваша проблема в том, что дескрипторы по умолчанию собираются упаковать больше, чем вам нужно, например, содержимое рабочих папок и т. д.? Это тот случай, когда в целевой папке есть определенная папка, которую вы хотите упаковать (например, ${project.build.directory}/installers), но вы хотите, чтобы другие каталоги были опущены? Или у тебя другая цель? - person RTBarnard; 25.03.2010
comment
Я удалил все ненужные файлы и каталоги из каталога ${project.build.directory} и просто хочу полностью заархивировать его содержимое. Если у вас нет предложения лучше, чем у Паскаля, я думаю, мне просто нужно создать этот избыточный файл сборки, как он показал, и выбрать его решение... - person Yaneeve; 25.03.2010