Распаковать внутренние молнии в zip с помощью Maven

Я могу распаковать zip-файл с помощью плагина maven-dependency, но в настоящее время у меня проблема с тем, что внутри этого zip-файла есть другие zip-файлы, и мне также нужно их распаковать. Как я могу это сделать?


person khmarbaise    schedule 16.07.2010    source источник


Ответы (4)


Вы можете разархивировать любые файлы с помощью плагина запуска задач ant:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.6</version>
    <executions>
        <execution>
            <id>prepare</id>
            <phase>validate</phase>
            <configuration>
                <tasks>
                    <echo message="prepare phase" />
                    <unzip src="zips/archive.zip" dest="output/" />
                    <unzip src="output/inner.zip" dest="output/" />
                    <unzip dest="output">
                      <fileset dir="archives">
                        <include name="prefix*.zip" />
                      </fileset>
                    </unzip>
                </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>
person Boris Pavlović    schedule 16.07.2010
comment
Я так понимаю, это помещено в ваш файл pom.xml? - person Rob Avery IV; 18.03.2013
comment
Да, это часть вашего файла Maven pom.xml. - person Boris Pavlović; 19.03.2013
comment
Как в этом примере распаковать файл, соответствующий регулярному выражению? Например. ‹unzip src=zips/archive[0-9].zip dest=output/ /› - person Georgios Stathis; 24.02.2016
comment
Попробуйте использовать подстановочный знак: <unzip src="zips/archive*.zip" dest="output/" /> - person Boris Pavlović; 24.02.2016
comment
Нет, это не сработает. Вместо этого у меня было больше шансов с набором файлов: <unzip dest="output"> <fileset dir="zips"> <include name="archive*.zip" /> </fileset> </unzip> - person Georgios Stathis; 24.02.2016

Использование ANT больше не круто ;)

http://maven.apache.org/plugins/maven-dependency-plugin/examples/unpacking-artifacts.html

Пример кода для распаковки zip-файла (archive.zip):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>unpack</id>
            <phase>process-resources</phase>
            <goals>
                <goal>unpack</goal>
            </goals>
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>foo</groupId>
                        <artifactId>archive</artifactId>
                        <version>1.0-SNAPSHOT</version>
                        <type>zip</type>
                    </artifactItem>
                </artifactItems>
            </configuration>
        </execution>
    </executions>
</plugin>

Сначала необходимо установить файл archive.zip в репозиторий maven. Например, с задачей Прикрепить артефакт org.codehaus.mojo:build-helper-maven-plugin:build-helper:attach-artifact

person MariuszS    schedule 04.10.2011
comment
Но это распаковывает только артефакты, а не произвольные файлы. - person Ondra Žižka; 20.07.2012
comment
@OndraŽižka С maven вы можете рассматривать любой произвольный файл как артефакт, просто посмотрите на build-helper:attach-artifact. - person MariuszS; 11.01.2014
comment
@MariuszS, как это сделать с произвольным файлом в локальной файловой системе? - person tojofo; 20.03.2014
comment
Может быть, ant не крут, но требует гораздо меньше строк и дает тот же результат. Кроме того, если вы прикрепляете артефакт с помощью build-helper, он генерирует множество других неприятных побочных эффектов. - person Alexander Pogrebnyak; 07.07.2014
comment
При сборке с помощью Eclipse Juno цель unpack не поддерживается m2e 1.3.1. - person Stephan; 29.12.2015
comment
Обычно бинарные (zip) файлы должны храниться вне репозитория VCS (GIT), например, могут быть развернуты в репозиторий артефактов (нексус). После этого вы можете распаковать такой артефакт, как описано выше. - person MariuszS; 21.04.2016
comment
Я сделал тест, и это НЕ распаковывает внутренние zip-файлы. Лучше использовать плагин Ant, как описано в другом ответе. - person Sergio; 07.06.2016

Плагин TrueZIP Maven также работает хорошо. Пример конфигурации:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>truezip-maven-plugin</artifactId>
    <version>1.2</version>
    <executions>
        <execution>
            <id>copy-package</id>
            <goals>
                <goal>copy</goal>
            </goals>
            <phase>package</phase>
            <configuration>
                <verbose>true</verbose>
                <fileset>
                    <directory>outer.zip</directory>
                    <outputDirectory>${project.build.directory}/outer</outputDirectory>
                </fileset>
                <fileset>
                    <directory>${project.build.directory}/outer/inner.zip</directory>
                    <outputDirectory>${project.build.directory}/inner</outputDirectory>
                </fileset>
            </configuration>
        </execution>
    </executions>
</plugin>

Официальные примеры

person palacsint    schedule 27.05.2015
comment
Codehaus закрывается, поэтому ссылки теперь ведут на страницу, которую мы реорганизуем. - person Troy Daniels; 20.10.2015
comment
@palacsint какова лицензия вышеуказанного плагина, я не могу найти ее в их документах - person Kasun Siyambalapitiya; 07.11.2017

Вы также можете использовать зависимости плагина. Есть цель распаковать зависимости (см. http://maven.apache.org/plugins/maven-dependency-plugin/unpack-dependencies-mojo.html)

person benzen    schedule 01.03.2011
comment
этот ответ НЕверен, вопрос касается файла с внутренним zip, а НЕ зависимости. - person Sergio; 07.06.2016