Расширение немного ответа Юргена для тех, кто наткнулся на это - containerDescriptorHandler
в дескрипторе может принимать четыре значения (v2.3), это metaInf-services
, file-aggregator
, plexus
, metaInf-spring
, Это немного скрыто в коде (находится в пакете org.apache.maven.plugin.assembly.filter
), но возможно объединить файлы конфигурации / свойств.
Вот пример дескриптора, который агрегирует META-INF/services
и
файлы именованных свойств, расположенные в com.mycompany.actions
.
descriptor.xml
<assembly>
...
<containerDescriptorHandlers>
<containerDescriptorHandler>
<handlerName>metaInf-services</handlerName>
</containerDescriptorHandler>
<containerDescriptorHandler>
<handlerName>file-aggregator</handlerName>
<configuration>
<filePattern>com/mycompany/actions/action.properties</filePattern>
<outputPath>com/mycompany/actions/action.properties</outputPath>
</configuration>
</containerDescriptorHandler>
</containerDescriptorHandlers>
....
</assembly>
file-aggregator
может содержать регулярное выражение в filePattern
для сопоставления нескольких файлов. Следующее будет соответствовать всем именам файлов 'action.properties'.
<filePattern>.+/action.properties</filePattern>
metaInf-services
и metaInf-spring
используются для агрегирования SPI и пружинных конфигурационных файлов соответственно, тогда как обработчик plexus
будет агрегировать META-INF/plexus/components.xml
вместе.
Если вам нужно что-то более специализированное, вы можете добавить свой собственный обработчик конфигурации, внедрив ContainerDescriptorHandler
и определив компонент в META-INF/plexus/components.xml
. Вы можете сделать это, создав исходный проект, который зависит от maven-assembly-plugin
и содержит ваш собственный обработчик. Возможно, это можно сделать в том же проекте, который вы собираете, но я этого не пробовал. Реализации обработчиков можно найти в пакете org.apache.maven.plugin.assembly.filter.*
исходного кода сборки.
CustomHandler.java
package com.mycompany;
import org.apache.maven.plugin.assembly.filter.ContainerDescriptorHandler;
public class CustomHandler implements ContainerDescriptorHandler {
// body not shown
}
затем определите компонент в /src/main/resources/META-INF/plexus/components.xml
components.xml
<?xml version='1.0' encoding='UTF-8'?>
<component-set>
<components>
<component>
<role>org.apache.maven.plugin.assembly.filter.ContainerDescriptorHandler</role>
<role-hint>custom-handler</role-hint>
<implementation>com.mycompany.CustomHandler</implementation>
<instantiation-strategy>per-lookup</instantiation-strategy>
</component>
</components>
</component-set>
Наконец, вы добавляете это как зависимость от плагина сборки в проекте, который хотите собрать
pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<descriptors>
<descriptor>...</descriptor>
</descriptors>
</configuration>
<dependencies>
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>sample-handler</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</plugin>
и определите имя обработчика в дескрипторе
descriptor.xml
...
<containerDescriptorHandler>
<handlerName>custom-handler</handlerName>
</containerDescriptorHandler>
...
maven-shade-plugin также может создавать 'uber-jars' и имеет некоторые преобразования ресурсов для обработки XML, лицензий и манифестов.
* +1067 * J