You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@plc4x.apache.org by Wolfgang Huse <wo...@nutanix.com> on 2020/05/14 08:31:38 UTC

Missing Drivers in fat JAR

Hi,
i am builing a fat jar with maven shade plugin but if I run the application an error occurs:

17:32.651 [main] INFO  o.apache.plc4x.java.PlcDriverManager - Instantiating new PLC Driver Manager with class loader jdk.internal.loader.ClassLoaders$AppClassLoader@55054057
10:17:32.653 [main] INFO  o.apache.plc4x.java.PlcDriverManager - Registering available drivers...
10:17:32.658 [main] INFO  o.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol modbus (Modbus)
Exception in thread "main" org.apache.plc4x.java.api.exceptions.PlcConnectionException: Unable to find driver for protocol 'opcua'

Any hint how to include the needed classes for the drivers ?

Mit freundlichen Grüßen – With kind regards

Wolfgang Huse


Re: Missing Drivers in fat JAR

Posted by Julian Feinauer <j....@pragmaticminds.de>.
Hey,

this is an issue that multiple people here faced... (cdutz, sruehl, myself at least).
Can we do anything to document that better?
I guess not?

Julian

Am 14.05.20, 15:59 schrieb "Wolfgang Huse" <wo...@nutanix.com>:

    Thanks a lot Chris...

    There was the Service transformer missing. I only had used the ManifestResourceTransformer (which is included in the pom.xml in the examples-folder). The Service transformer is inherited from the project root pom.xml

    Works now as expected....

    Mit freundlichen Grüßen – With kind regards

    Wolfgang Huse

    On 5/14/20, 2:11 PM, "Christofer Dutz" <ch...@c-ware.de> wrote:

        Hi Wolfgang,

        if you are speaking about a project of yours where you are using the shade plugin, then you need to add a transformer to your plugin configuration.
        Every driver has a META-INF/services/org.apache.plc4x.java.api.PlcDriver file, which lists that particular driver.
        If you run the shade plugin without any transformer only one of these are packaged in the jar the others are omitted. 
        That's why you have only one driver availale.

        In order to fix this please update your plugin configuration like we did in the examples:

              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <executions>
                  <execution>
                    <id>generate-uber-jar</id>
                    <phase>package</phase>
                    <goals>
                      <goal>shade</goal>
                    </goals>
                    <configuration>
                      <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                          <mainClass>${app.main.class}</mainClass>
                        </transformer>
                      </transformers>
        	<filters>
                      <filter>
                        <!--
                          These files contain signatures for classes, omit them as in
                          shaded archives this has cause quite some problems in the past.
                        -->
                        <artifact>*:*</artifact>
                        <excludes>
                          <exclude>META-INF/*.SF</exclude>
                          <exclude>META-INF/*.DSA</exclude>
                          <exclude>META-INF/*.RSA</exclude>
                        </excludes>
                      </filter>
                    </filters>
                    </configuration>
                  </execution>
                </executions>
              </plugin>

        Hope that helps.


        Chris



                      <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>

        Am 14.05.20, 10:31 schrieb "Wolfgang Huse" <wo...@nutanix.com>:

            Hi,
            i am builing a fat jar with maven shade plugin but if I run the application an error occurs:

            17:32.651 [main] INFO  o.apache.plc4x.java.PlcDriverManager - Instantiating new PLC Driver Manager with class loader jdk.internal.loader.ClassLoaders$AppClassLoader@55054057
            10:17:32.653 [main] INFO  o.apache.plc4x.java.PlcDriverManager - Registering available drivers...
            10:17:32.658 [main] INFO  o.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol modbus (Modbus)
            Exception in thread "main" org.apache.plc4x.java.api.exceptions.PlcConnectionException: Unable to find driver for protocol 'opcua'

            Any hint how to include the needed classes for the drivers ?

            Mit freundlichen Grüßen – With kind regards

            Wolfgang Huse





Re: Missing Drivers in fat JAR

Posted by Wolfgang Huse <wo...@nutanix.com>.
Thanks a lot Chris...

There was the Service transformer missing. I only had used the ManifestResourceTransformer (which is included in the pom.xml in the examples-folder). The Service transformer is inherited from the project root pom.xml

Works now as expected....

Mit freundlichen Grüßen – With kind regards
 
Wolfgang Huse

On 5/14/20, 2:11 PM, "Christofer Dutz" <ch...@c-ware.de> wrote:

    Hi Wolfgang,

    if you are speaking about a project of yours where you are using the shade plugin, then you need to add a transformer to your plugin configuration.
    Every driver has a META-INF/services/org.apache.plc4x.java.api.PlcDriver file, which lists that particular driver.
    If you run the shade plugin without any transformer only one of these are packaged in the jar the others are omitted. 
    That's why you have only one driver availale.

    In order to fix this please update your plugin configuration like we did in the examples:

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <executions>
              <execution>
                <id>generate-uber-jar</id>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                      <mainClass>${app.main.class}</mainClass>
                    </transformer>
                  </transformers>
    	<filters>
                  <filter>
                    <!--
                      These files contain signatures for classes, omit them as in
                      shaded archives this has cause quite some problems in the past.
                    -->
                    <artifact>*:*</artifact>
                    <excludes>
                      <exclude>META-INF/*.SF</exclude>
                      <exclude>META-INF/*.DSA</exclude>
                      <exclude>META-INF/*.RSA</exclude>
                    </excludes>
                  </filter>
                </filters>
                </configuration>
              </execution>
            </executions>
          </plugin>

    Hope that helps.


    Chris



                  <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>

    Am 14.05.20, 10:31 schrieb "Wolfgang Huse" <wo...@nutanix.com>:

        Hi,
        i am builing a fat jar with maven shade plugin but if I run the application an error occurs:

        17:32.651 [main] INFO  o.apache.plc4x.java.PlcDriverManager - Instantiating new PLC Driver Manager with class loader jdk.internal.loader.ClassLoaders$AppClassLoader@55054057
        10:17:32.653 [main] INFO  o.apache.plc4x.java.PlcDriverManager - Registering available drivers...
        10:17:32.658 [main] INFO  o.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol modbus (Modbus)
        Exception in thread "main" org.apache.plc4x.java.api.exceptions.PlcConnectionException: Unable to find driver for protocol 'opcua'

        Any hint how to include the needed classes for the drivers ?

        Mit freundlichen Grüßen – With kind regards

        Wolfgang Huse




Re: Missing Drivers in fat JAR

Posted by Christofer Dutz <ch...@c-ware.de>.
Hi Wolfgang,

if you are speaking about a project of yours where you are using the shade plugin, then you need to add a transformer to your plugin configuration.
Every driver has a META-INF/services/org.apache.plc4x.java.api.PlcDriver file, which lists that particular driver.
If you run the shade plugin without any transformer only one of these are packaged in the jar the others are omitted. 
That's why you have only one driver availale.

In order to fix this please update your plugin configuration like we did in the examples:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <executions>
          <execution>
            <id>generate-uber-jar</id>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>${app.main.class}</mainClass>
                </transformer>
              </transformers>
	<filters>
              <filter>
                <!--
                  These files contain signatures for classes, omit them as in
                  shaded archives this has cause quite some problems in the past.
                -->
                <artifact>*:*</artifact>
                <excludes>
                  <exclude>META-INF/*.SF</exclude>
                  <exclude>META-INF/*.DSA</exclude>
                  <exclude>META-INF/*.RSA</exclude>
                </excludes>
              </filter>
            </filters>
            </configuration>
          </execution>
        </executions>
      </plugin>

Hope that helps.


Chris



              <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>

Am 14.05.20, 10:31 schrieb "Wolfgang Huse" <wo...@nutanix.com>:

    Hi,
    i am builing a fat jar with maven shade plugin but if I run the application an error occurs:

    17:32.651 [main] INFO  o.apache.plc4x.java.PlcDriverManager - Instantiating new PLC Driver Manager with class loader jdk.internal.loader.ClassLoaders$AppClassLoader@55054057
    10:17:32.653 [main] INFO  o.apache.plc4x.java.PlcDriverManager - Registering available drivers...
    10:17:32.658 [main] INFO  o.apache.plc4x.java.PlcDriverManager - Registering driver for Protocol modbus (Modbus)
    Exception in thread "main" org.apache.plc4x.java.api.exceptions.PlcConnectionException: Unable to find driver for protocol 'opcua'

    Any hint how to include the needed classes for the drivers ?

    Mit freundlichen Grüßen – With kind regards

    Wolfgang Huse