2013-08-18 4 views
2

У меня есть проект B, наследуемый от проекта A. В Project A мне нужно скопировать файл jar, загруженный из Maven в папку lib. Проект А в П файл:Исключить артефакты, унаследованные от родительского POM?

<groupId>com.penguin.com.projecta</groupId> 
<artifactId>penguin-common--pom</artifactId> 
<packaging>pom</packaging> 
<version>${com.penguin.common.projecta}</version> 
<name>Penguin COMMON POM</name> 

<modules> 
    <module>projectb</module> 
</modules> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>copy-jars</id> 
        <phase>process-sources</phase> 
        <goals> 
         <goal>copy</goal> 
        </goals> 
        <configuration> 
         <overWriteIfNewer>true</overWriteIfNewer>     
         <artifactItems> 
          <artifactItem> 
           <groupId>ant-contrib</groupId> 
           <artifactId>ant-contrib</artifactId> 
           <version>1.1</version> 
           <type>jar</type> 
           <destFileName>ant-contrib.jar</destFileName> 
           <outputDirectory>lib</outputDirectory> 
          </artifactItem> 
         </artifactItems> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin>   
    </plugins> 
</build> 

Когда я построить, Maven скопирована банка файл в папку Lib, но также создать Lib папку в проекте B и скопировать файл банки, определенный в файле п Проекта А в в него. Теперь я хочу исключить его в проекте B. Я попытался использовать этот скрипт ниже, но он не работает.

<dependencies> 
    <dependency> 
     <groupId>com.penguin.com.projecta</groupId> 
     <artifactId>penguin-common--pom</artifactId> 
     <version>${com.penguin.common.projecta}</version> 
     <type>pom</type> 
     <exclusions> 
      <exclusion> 
       <groupId>ant-contrib</groupId> 
       <artifactId>ant-contrib</artifactId>       
      </exclusion> 
     </exclusions> 
    </dependency> 
</dependencies> 

Я имею в виду эту ссылку: Is there anyway to exclude artifacts inherited from a parent POM?. Но мне это тоже не помогает.

ответ

3

Хотя у меня есть сомнения, если ваша структура проекта является правильным (я не могу думать о хорошем, например, когда родитель ПОМ должен копировать зависимости ...), но вы, вероятно, ищете inherited в тег

0

Вы были отмечены в том же месте. Вы хотите исключить артефакт из конфигурации maven-dependency-plugin, а не из зависимостей проекта. Волшебный ингредиент здесь атрибут combine.self="override"

От Maven Pom Reference: «Вы можете контролировать, как ребенок РОМ наследует конфигурацию от родительского РОМА путем добавления атрибутов к детям элемента конфигурации Атрибутов являются combine.children и combine.self.. Используйте эти атрибуты в дочернем POM для управления тем, как Maven сочетает в себе конфигурацию плагина от родителя с явной конфигурацией в дочернем элементе. "

Вы должны изменить настройки вашего ребенка ПОМ к чему-то вроде этого:

<build> 
<plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <executions> 
      <execution> 
       <id>copy-jars</id> 
       <phase>process-sources</phase> 
       <goals> 
        <goal>copy</goal> 
       </goals> 
       <configuration> 
        <overWriteIfNewer>true</overWriteIfNewer>     
        <artifactItems combine.self="override"> 

        </artifactItems> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin>   
</plugins> 

Я не уверен, если это возможно, чтобы просто исключить конкретный артефакт, а не над ездой всю декларацию artifactItems, вот что я искал, когда я наткнулся на ваш вопрос. Чтобы обойти это, моя установка, вероятно, будет включать наследование multi pom, поскольку мы перечисляем около 100 артефактов в нашей конфигурации плагина, и я хочу только исключить и поменять местами различные реализации для нескольких артефактов в моем дочернем помпе.