2016-07-13 4 views
1

Я просто пытаюсь скопировать некоторые файлы в некоторые каталоги и использовать этот плагин, так как мне говорят, что это удобно. Тем не менее, всякий раз, когда я пытаюсь сделать mvn install, плагин как-то пытается перебрать каждый модуль в моей pom.xml (я никогда не просил его делать такого рода вещи) и пытается сделать какую-то операцию, а затем дает ошибку:maven-assembly-plugin петли над каждым модулем, не сообщая об этом

Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.6:single (make-install-assembly) on project untoldProject Failed to create assembly: Error creating assembly archive install: You must set at least one file. 

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

Вот мой pom.xml где я использую плагин:

<!-- This plugin is used to copy the necessary files to project.release/install folder --> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.6</version> 
      <executions> 
      <execution> 
       <id>make-install-assembly</id> 
       <phase>package</phase> 
       <goals> 
       <goal>single</goal> 
       </goals> 
       <inherited>true</inherited> 
       <configuration> 
       <descriptors> 
        <descriptor>assembly.xml</descriptor> 
       </descriptors> 
       <appendAssemblyId>false</appendAssemblyId> 
       <attach>true</attach> 
       </configuration> 
      </execution> 
      </executions> 
     </plugin> 

Вот мой asssembly.xml где я указываю, что я хочу, чтобы скопировать:

<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>install</id> 
    <formats> 
     <format>dir</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <fileSets> 
     <fileSet> 
      <directory>project.release/template</directory> 
      <outputDirectory>project.release/install</outputDirectory> 
      <lineEnding>unix</lineEnding> 
      <filtered>true</filtered> 
      <includes> 
       <include>run.all.sh</include> 
       <include>kill.all.sh</include> 
       <include>packlogs.sh</include> 
      </includes> 
      <excludes> 
       <exclude>config.properties</exclude> 
       <exclude>run.all.ant</exclude> 
       <exclude>run.ant</exclude> 
       <exclude>packlogs.sh</exclude> 
       <exclude>install.sh</exclude> 
      </excludes> 
     </fileSet> 
    </fileSets> 
</assembly> 

Учитывая это, почему плагин пытается выполнить эту операцию для каждого модуля? Я просто хочу, чтобы это произошло для одного модуля, называемого project.release, и все. Для вашей информации я помещаю оба моих pom.xml и assembly.xml в родительский каталог.

Update: Для тех, кто хотел бы видеть мой проект hiearchy, вот мой мастер pom.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>runtime_project</groupId> 
    <artifactId>runtime_project.master</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 
    <properties> 
     <jdk.version>1.8</jdk.version> 
    </properties> 
    <modules> 
     <module>project.messages</module> 
     <module>project.base</module> 
     <module>project.logging</module> 
     <module>project.mission.launch</module> 
     <module>project.mission.detach</module> 
     <module>project.settingsStore</module> 
    </modules> 
    <build> 
     <sourceDirectory>src/</sourceDirectory> 
     <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.2</version> 
      <configuration> 
       <source>${jdk.version}</source> 
       <target>${jdk.version}</target> 
      </configuration> 
     </plugin> 

     <!-- This plugin is used to delete the contents of the project.release/install folder--> 
     <plugin> 
      <artifactId>maven-clean-plugin</artifactId> 
      <version>3.0.0</version> 
      <executions> 
       <execution> 
        <id>auto-clean</id> 
        <phase>initialize</phase> 
        <goals> 
         <goal>clean</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <verbose>true</verbose> 
       <excludeDefaultDirectories>true</excludeDefaultDirectories> 
       <filesets> 
        <fileset> 
        <directory>project.release/install</directory> 
        <followSymlinks>false</followSymlinks> 
        <useDefaultExcludes>true</useDefaultExcludes> 
        <includes> 
         <include>**/*</include> 
        </includes> 
        </fileset> 
       </filesets> 
      </configuration> 
     </plugin> 
     <!-- This plugin is used to copy the necessary files to project.release/install folder --> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.6</version> 
      <executions> 
      <execution> 
       <id>make-install-assembly</id> 
       <phase>package</phase> 
       <goals> 
       <goal>single</goal> 
       </goals> 
       <inherited>true</inherited> 
       <configuration> 
       <descriptors> 
        <descriptor>deploy.xml</descriptor> 
       </descriptors> 
       <appendAssemblyId>false</appendAssemblyId> 
       <attach>true</attach> 
       </configuration> 
      </execution> 
      </executions> 
     </plugin> 
     </plugins> 
    </build> 
</project> 
+0

@Ulrich Еще раз проверьте, будет ли это достаточно или вам нужно больше? –

+1

ОК.** Во-первых: ** Это характер проекта мультимодуля maven, который модули, которые вы определяете в '' корневой POM, выполняются по всем модулям. ** Second: ** Вы говорите о модуле с именем 'project.release', но это не входит в список ваших модулей. – JimHawkins

+0

Для ** первого пункта **: как это сделать для выполнения только ** ** для некоторых определенных модулей, не для всех? ** Second: ** Это просто папка (извините, это не модуль с 'pom.xml'), из которого я хочу скопировать файлы. Должен ли быть модуль с 'pom.xml'? –

ответ

1

Учитывая это, почему плагин попытаться сделать эту операцию для каждого модуля ?

Потому что это характер проекта с несколькими модулями.

Я просто хочу, чтобы это произошло для одного модуля, называемого project.release, и вот и все. Я поместил оба моих pom.xml и assembly.xml в родительский каталог , для вашей информации.

Я даю несколько советов, а не полное решение.

  1. создать дополнительный модуль под названием project.release. Добавьте его в элемент <modules> в корневой POM. Порядок Не важно
  2. движения плагин-запись для Maven-сборка-плагина от корня POM к П из project.release
  3. В П из project.release, добавлять зависимости от других модулей по мере необходимости.
  4. В папке project.release поместите дескриптор сборки в src/main/assembly. Записи каталога в вашем дескрипторе должны относиться к корню модуля от project.release
+0

Итак, чтобы этот плагин работал, рабочая папка должна быть корневой папкой модуля, так ли это? Тогда консенсусом является то, что мы не можем использовать его для проведения простых операций с папками/файлами с основного ПОМ. –

+1

@ Schütze правильный. Если немецкий язык не является проблемой, см. Мартин Спиллер, «Maven 3 - Konfigurationsmanagement mit Java». – JimHawkins

+0

Будет, спасибо. –

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

  • Нет связанных вопросов^_^