2013-07-09 2 views
3

Мы пытаемся построить две банки из одного и того же файла pom (и да, я прочел this Sonotype blog post, говоря не), потому что нам нужен один со всеми нашими ресурсами и один без внутренних политиков. Мы сконфигурировали maven-jar-plugin с конфигурацией, которую мы считаем, что должен работать, но ресурсы всегда включены. Вот соответствующая часть нашего файла пом:maven-jar-plugin Исключения Ошибки

<plugins> 
    <plugin> 
     <artifactId>maven-jar-plugin</artifactId> 
     <executions> 
      <execution> 
       <id>package-consumer</id> 
       <phase>package</phase> 
       <configuration> 
        <classifier>consumer</classifier> 
        <resources> 
         <resource> 
          <directory>src/main/resources</directory> 
          <filtering>true</filtering> 
          <excludes> 
           <exclude>**/*.bmp</exclude> 
           <exclude>**/*.jpg</exclude> 
           <exclude>**/*.jpeg</exclude> 
           <exclude>**/*.gif</exclude> 
           <exclude>**/*.xml</exclude> 
           <exclude>**/*.sql</exclude> 
           <exclude>**/*.log4j</exclude> 
           <exclude>**/*.properties</exclude> 
           <exclude>**/*.sh</exclude> 
          </excludes> 
         </resource> 
        </resources> 
       </configuration> 
       <goals> 
        <goal>jar</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 
</plugins> 

Когда мы строим, мы получаем OurProject.Jar и OurProject-consumer.jar, как можно было бы ожидать, но все те же ресурсы в каждом файле фляги.

Мы перепробовали <exclude>**/*</exclude> и <exclude>**/resources/*.*</exclude> вместо списка или конкретных расширений. Нет радости. Я надеюсь, что нам не хватает чего-то основного.

ответ

4

Рекомендовано, что вы используете maven-assembly-plugin для своей потребительской банки, но поскольку вы настроены сделать это с помощью maven-jar-plugin, давайте исправим вашу сборку.

Проблема заключается в том, что вы вводите в заблуждение параметр, запрещающий ресурсы от being filtered с настройкой, которая фактически исключает ресурсы из банки (оба используют <exclude /> теги).

Следующая конфигурация (внутри <plugins />) вызывает второй вызов jar:jar во время фазы упаковки. Это исключит желаемые ресурсы из потребительской баночки (эффективно делать то, что вы хотите):

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.4</version> 
    <executions> 
     <execution> 
     <id>package-consumer</id> 
     <phase>package</phase> 
     <goals> 
      <goal>jar</goal> 
     </goals> 
     <configuration> 
      <classifier>consumer</classifier> 
      <excludes> 
      <exclude>**/*.bmp</exclude> 
      <exclude>**/*.jpg</exclude> 
      <exclude>**/*.jpeg</exclude> 
      <exclude>**/*.gif</exclude> 
      <exclude>**/*.xml</exclude> 
      <exclude>**/*.sql</exclude> 
      <exclude>**/*.log4j</exclude> 
      <exclude>**/*.properties</exclude> 
      <exclude>**/*.sh</exclude> 
      </excludes> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

Хотя эта конфигурация (внутри <resources />) позволяет фильтрация (т.е. свойство замены с использованием resource:resource во время процесса-ресурсов фазы) для XML и файлы свойств; но не для изображений и других двоичных файлов, которые будут скопированы без изменений.

<resource> 
    <directory>src/main/resources</directory> 
    <filtering>true</filtering> 
    <includes> 
     <include>**/*.xml</include> 
     <include>**/*.properties</include> 
    </includes> 
    </resource> 
    <resource> 
    <directory>src/main/resources</directory> 
    <filtering>false</filtering> 
    <excludes> 
     <exclude>**/*.xml</exclude> 
     <exclude>**/*.properties</exclude> 
    </excludes> 
    </resource> 

С обеих конфигураций на месте вы фактически будете строить две банки. Значение по умолчанию со всеми ресурсами (включая фильтрованные файлы xml и свойств) и вторичную потребительскую банку без ресурсов.

+0

Спасибо @ Энтони-Acioly. Исправлена ​​ошибка с перемещением метки из . Я не понимаю необходимость вашего блока в тегах , так как наши банки кажутся правильными без них. – cneff

+0

Еще одно предостережение, с которым мы столкнулись: когда мы сделали frist, он правильно исключил файл POM из потребительской банки, а это означало, что никаких изменений в банке consuer не было сделано, поэтому он не восстановил его! Само собой разумеется, это вызвало у нас некоторую путаницу и разочарование, пока мы не заметили разные временные метки в двух файлах jar. – cneff

+0

Вторая настройка позволяет включить [фильтрацию] (http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html) для набора расширений файлов (при копировании остальных ресурсов без изменений) , Я предположил, что вам нужна фильтрация из-за оригинала ' true'. Что касается pom.xml, если вы хотите его вернуть, вам может потребоваться переосмыслить шаблон ' **/*. Xml'. –

2

Я хотел бы предложить, чтобы сделать это следующим образом:

<build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>second-jar</id> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <configuration> 
       <classifier>without</classifier> 
       <excludes> 
       <exclude>**/*</exclude> 
       </excludes> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
+0

Замена секции исключений конечно (иначе вы создадите пустую банку). –

+0

Спасибо за быстрый ответ @khmarbaise! Принимая во внимание редактирование Энтони, это решение сработало. – cneff

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