Hi Gunther,

thanks fort he notice... I'll check that.
This is a point where we should definitely become better with our Documentation 
(which documentation??) : )

Julian

Am 23.04.19, 09:28 schrieb "Gunther Gruber" <[email protected]>:

    Hi Julian,
    
    I think this issue is also a bit similar to the problem and solution i 
    took for using the driver in osgi. see mail "POM file for karaf/osgi 
    integration". While everybody loves automatic loading of drivers, in 
    some corne cases it is a stepping stone.
    
    
    Gunther
    
    On 23.04.19 09:22, Julian Feinauer wrote:
    > Hi Lukasz,
    >
    > thanks for your email.
    > I think this is similar to what I now achieved with the assembly plugin.
    > As I understand it, the shading plugin is the "big brother" of the 
assembly plugin as it can also shade... but I think we don’t need it for this 
case.
    > Just wanted to bring this to the list, as I had this issue multiple times.
    > Perhaps we should even write this somewhere in the docu.
    >
    > Julian
    >
    > Am 21.04.19, 21:54 schrieb "Łukasz Dywicki" <[email protected]>:
    >
    >      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