From quick look at issue and description - you might check out maven shade 
plugin [1] with its resource transformers [2] which can help you to merge 
manifests and other things in case of overlapping occurrences. 

Cheers,
Łukasz

[1] https://maven.apache.org/plugins/maven-shade-plugin/index.html
[2] 
https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html

> On 21 Apr 2019, at 14:24, Julian Feinauer <[email protected]> 
> wrote:
> 
> Hi all,
> 
> I just stumbled upon something, I think I observed before, but wanted to 
> bring it back to the list (again).
> First off, I’m unsure if it’s a bug or a feature so lets discuss this (and if 
> it’s a feature, here is an explanation how to deal with it gracefully).
> 
> For my interop server (see PLC4X-111) I built a server which other languages 
> can run in the background to issue queries against.
> Thus, a “fat-jar” was necessary (which I created using the assembly plugin).
> And after that, I observed that I can only use ONE driver, all others do “not 
> work”.
> 
> This is, due to the fact, that our service files (under META-INF/service) are 
> overwritten, with the default configuration as they are copied together.
> If one uses the maven assembly plugin this can be solved as there are 
> container descriptor handlers [1] which copy all lines from all these files 
> together.
> But, if using these, one needs to create a separate assembly descriptor.
> Mine is
> 
> ```
> <assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0";
>          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 
> http://maven.apache.org/xsd/assembly-2.0.0.xsd";>
>  <!-- TODO: a jarjar format would be better -->
>  <id>jar-with-dependencies</id>
>  <formats>
>    <format>jar</format>
>  </formats>
>  <includeBaseDirectory>false</includeBaseDirectory>
>  <dependencySets>
>    <dependencySet>
>      <outputDirectory>/</outputDirectory>
>      <useProjectArtifact>true</useProjectArtifact>
>      <unpack>true</unpack>
>      <scope>runtime</scope>
>    </dependencySet>
>  </dependencySets>
>  <containerDescriptorHandlers>
>    <containerDescriptorHandler>
>      <handlerName>metaInf-services</handlerName>
>    </containerDescriptorHandler>
>  </containerDescriptorHandlers>
> </assembly>
> ```
> 
> This is basically the default “jar-with-dependencies” plus the container 
> descriptor handler for the meta-inf/services files.
> This xml should be placed unter src/assembly (states the docu).
> 
> Then, the pom has to adapted in the following way:
> 
> ```
>      <plugin>
>        <groupId>org.apache.maven.plugins</groupId>
>        <artifactId>maven-assembly-plugin</artifactId>
>        <version>2.5.3</version>
>        <configuration>
>          <!-- get all project dependencies -->
> <!--          <descriptorRefs>-->
> <!--            <descriptorRef>jar-with-dependencies</descriptorRef>-->
> <!--            <descriptorRef>metaInf-services</descriptorRef>-->
> <!--          </descriptorRefs>-->
>          <descriptors>src/assembly/assembly.xml</descriptors>
>          <!-- MainClass in mainfest make a executable jar -->
>          <archive>
>            <manifest>
>              <mainClass>org.apache.plc4x.interop.impl.Server</mainClass>
>            </manifest>
>          </archive>
> 
>        </configuration>
>        <executions>
>          <execution>
>            <id>make-assembly</id>
>            <!-- bind to the packaging phase -->
>            <phase>package</phase>
>            <goals>
>              <goal>single</goal>
>            </goals>
>          </execution>
>        </executions>
>      </plugin>
> 
> ```
> 
> The finally packed “fat-jar” works then flawlessly and with multiple 
> implementations of the same Service.
> 
> Is this the way we agree to go?
> Is my setting correct?
> 
> Julian
> 
> PS.: This code (above) can be found in my implementation for PLC4X-111 the 
> interop server, see [2].
> 
> [1] 
> https://maven.apache.org/plugins/maven-assembly-plugin/examples/single/using-container-descriptor-handlers.html#
> [2] 
> https://github.com/apache/incubator-plc4x/tree/7aeefaf5df63c6e235256d5d1140d4c5dd7d1047

Reply via email to