2015-11-11 4 views
6

Единственный опыт Maven, который у меня есть, включает в себя другие библиотеки, поэтому мне нужно очень простое объяснение того, как я могу достичь вещей в Maven с Eclipse.Создайте zip в maven с дополнительными файлами рядом с банкой

Я хочу создать свою банку регулятором. Затем я хочу взять еще 3 файла и поместить все файлы в один ZIP-файл. Содержание моего почтового индекса должен выглядеть следующим образом:

A.jar 
B.txt 
C.txt 
D.bat 

Я знаю, что я должен вставить определенные цели в моем pom.xml файле. Я уже видел сообщения о переполнении стека (т. Е. here) по аналогичным темам. Я также попробовал документацию Maven, например, here. Мне уже нужны какие-либо плагины Maven или все еще есть материал Maven-core?

Но моих навыков еще недостаточно, чтобы передать эту информацию для моего дела.

+1

Решение является Maven сборки-плагин, как описанных в ответе на ссылку (http://stackoverflow.com/questions/5717183/create-a-zip-with-all-dependencies-with-maven). Что вам нужно сделать, это включить maven-assembly-plugin в ваш pom.xml и создать настроенный файл assembly.xml в src/main/assembly. Вообще говоря, набор файлов в файле assembly.xml определяет, что будет включено в созданный архив.После вызова mvn clean install новый zip-архив должен быть доступен в целевой папке проектов. Надеюсь, что это поможет ... –

+0

По умолчанию для дескриптора сборки является 'src/assembly' ... См. Https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout. html – khmarbaise

ответ

3

Вам необходимо использовать maven-assembly-plugin, когда вам нужно создать пользовательские артефакты. Я настоятельно рекомендую вам прочитать Chapter 8. Maven Assemblies книги Maven, чтобы вы начали использовать сборки. В этой главе содержатся подробные пояснения о создании сборок Maven, и их легко прочитать.

В принципе, сборка создается с помощью assembly descriptor. Следующий дескриптор сборки будет включать основной артефакт проекта в корне zip-архива. Вы можете добавить больше <file> или <fileSets> объявление здесь, чтобы добавить свои файлы в архиве (логика такая же)

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 
    <id>assemby-id</id> 
    <formats> 
     <format>zip</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <files> 
     <file> 
      <source>${project.build.directory}/${project.build.finalName}.${project.packaging}</source> 
      <outputDirectory>/</outputDirectory> 
     </file> 
    </files> 
</assembly> 

Тогда вам просто нужно объявить этот плагин в вашем ПОМ. В этом случае плагин привязан к фазе package и сконфигурирован с дескриптором выше. По умолчанию идентификатор сборки добавляется к имени архива: я удалил его здесь.

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.5.5</version> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <descriptors> 
        <descriptor>assembly.xml</descriptor> <!-- path to the descriptor --> 
       </descriptors> 
       <appendAssemblyId>false</appendAssemblyId> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

При запуске mvn clean package, вы увидите, что архив застежка-молния будет создана в каталоге target.

+0

Я не понимаю использование переменных: $ {project.build.directory}/$ {project.build.finalName}. $ {project.packaging} В какую часть вы включаете мои файлы A , B, C и D? –

+1

@BerndErnst переменные здесь, так что часть основного артефакта не жестко закодирована, вот и все. Что касается файлов A-D, как я сказал в своем ответе, вы можете добавить '' элементы для каждого из файлов. Это зависит от структуры вашего каталога, поэтому я не могу дать более конкретный ответ. – Tunaki

7
+ project 
    + src/main/java 
    + src/main/resources 
    + src/main/config 
      +B.txt 
      +C.txt 
      +D.bat 
    + src/main/assembly 
      +bin.xml 
    +pom.xml 

bin.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.basedir}/src/main/config</directory> 
     <outputDirectory>/</outputDirectory> 
    </fileSet> 
    <fileSet> 
     <directory>${project.build.directory}</directory> 
     <outputDirectory>/</outputDirectory> 
     <includes> 
     <include>*.jar</include> 
     </includes> 
    </fileSet> 
    </fileSets> 
</assembly> 

poml.xml

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
     <descriptors> 
      <descriptor>src/main/assembly/bin.xml</descriptor> 
     </descriptors> 
     <appendAssemblyId>false</appendAssemblyId> 
    </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> 
     </execution> 
    </executions> 
</plugin> 

Выход: МВН чистый пакет

+ artifactId-version.zip 
    + B.txt 
    +C.txt 
    +D.txt 
    +artifactId-version.jar 

не добавил b.txt, C.txt, D.bat в SRC/основные/ресурсов, потому что это не хорошо, чтобы иметь их в CLASSSPATH

Смежные вопросы