2016-07-07 3 views
1

Когда проект использует maven-jar-plugin, легко добавить в манифест пользовательский файл манифеста, но я не могу найти способ сделать то же самое с тень maven. Как я могу использовать свой файл манифеста при использовании «maven-shade-plugin»?Как я могу указать пользовательский файл MANIFEST.MF при использовании плагина Maven Shade?

Дополнительная информация:

Мой заказ файла манифеста находится в "SRC/основной/ресурсы/META-INF/MANIFEST.MF". Maven не включает мой файл, вместо этого он заменяется в последнем банке файлом манифеста по умолчанию maven.

Причина, по которой мне нужен файл манифеста, заключается в том, чтобы указать некоторые классы JavaBeans в моем манифесте для библиотеки компонентов swing. Несколько классов JavaBeans должны быть указаны в файле манифеста в следующем формате: described here. Обратите внимание, что пустые строки (и группировка строк) важны для маркировки классов JavaBeans в манифесте.

Name: SomeBean1.class 
Java-Bean: True 

Name: SomeBean2.class 
Java-Bean: True 

Name: SomeBean3.class 
Java-Bean: True 

Список покушения решений (они не работают):

1) Этот код работает только при использовании Maven плагина банки (не оттенок).

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
     <archive> 
     <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile> 
     </archive> 
    </configuration> 
    </plugin> 

2) This link говорит: «Как и во всех примерах здесь, эта конфигурация может использоваться во всех плагинов, которые используют Maven архиватор, а не только Maven-Jar-плагин, как в этом примере.» Основываясь на этом совете, я попробовал следующий код, но это тоже не сработало. (Maven еще заменил мой файл манифеста с файлом манифеста по умолчанию.)

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.4.3</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <archive> 
          <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile> 
         </archive> 
         <shadedArtifactAttached>true</shadedArtifactAttached> 
         <shadedClassifierName>core</shadedClassifierName> 
         <createDependencyReducedPom>false</createDependencyReducedPom> 
         <minimizeJar>true</minimizeJar>  
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

3) Я не могу использовать тени «ManifestResourceTransformer», как described here, чтобы сделать работу, по следующей причине. Мне нужно добавить классы JavaBeans в мой файл манифеста, как описано выше в разделе «Дополнительные сведения». Однако, если я добавляю манифестные записи с использованием тени ManifestResourceTransformer, эти записи вставляются в файл манифеста в непредсказуемом (случайном порядке) порядке. Для указания классов JavaBeans важно упорядочить записи манифеста (порядок строк).

4) Я попытался использовать IncludeResourceTransformer, но нижеприведенный код вызывает следующую ошибку: «Ошибка создания заштрихованной банки: дублирующаяся запись: META-INF/MANIFEST.MF».

    <configuration> <shadedArtifactAttached>true</shadedArtifactAttached> 
         <shadedClassifierName>core</shadedClassifierName><createDependencyReducedPom>false</createDependencyReducedPom> 
         <minimizeJar>true</minimizeJar>  
         <transformers> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer"> 
           <resource>META-INF/MANIFEST.MF</resource> 
           <file>src/main/resources/META-INF/MANIFEST.MF</file> 
          </transformer> 
         </transformers> 
        </configuration> 

Заранее благодарим за любую помощь!

ответ

2

Следующая конфигурация pom позволяет программисту заменить файл манифеста, созданный плагином Apache Maven Shade, с пользовательским файлом манифеста. Пользовательский файл манифеста должен быть помещен в этот каталог в проекте maven: «src/main/resources/META-INF/MANIFEST.MF»

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.4.3</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         ... 
         <transformers> 

          <!-- Don't do this: Avoid adding anything that makes shade create or modify a manifest file. 
          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <mainClass>com.mypackage.MyMainClass</mainClass> 
          </transformer> 
          --> 

          <!-- Add a transformer to exclude any other manifest files (possibly from dependencies). --> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer"> 
           <resource>MANIFEST.MF</resource> 
          </transformer> 

          <!-- Add a transformer to include your custom manifest file. --> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer"> 
           <resource>META-INF/MANIFEST.MF</resource> 
           <file>src/main/resources/META-INF/MANIFEST.MF</file> 
          </transformer> 

         </transformers> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin>