Maven shade plugin Packaging DLL

dll, java, maven

Solution

Also being new to Maven, it took me a while to solve a similar problem. This answer may help others.

Using com.microsoft.sqlserver:mssql-jdbc_auth with mssql-jdbc_auth-10.2.3.x64.dll as a dependency.

Fortunately the dll is a separate artifact from the mssql jdbc jar.

To stop the shade plugin trying to open the dll as a zip file....

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>3.2.4</version>
      <executions>
      <execution>
          <phase>package</phase>
          <goals>
            <goal>shade</goal>
          </goals>
          <configuration>
            <artifactSet>
              <excludes>
                <exclude>com.microsoft.sqlserver:mssql-jdbc_auth</exclude>
              </excludes>
            </artifactSet>
          </configuration>
        </execution>
      </executions>
     </plugin>

and then to put the dll into the same directory as the shaded jar file

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-dependency-plugin</artifactId>
      <version>3.1.2</version>
      <executions>
        <execution>
          <id>copy-dependencies</id>
          <phase>prepare-package</phase>
          <goals>
            <goal>copy-dependencies</goal>
          </goals>
          <configuration>
            <outputDirectory>${project.build.directory}</outputDirectory>
            <includeArtifactIds>mssql-jdbc_auth</includeArtifactIds>
          </configuration>
        </execution>
      </executions>
    </plugin>

Problem

I have to add to my project a JNI module. I install the module in Maven as two different artifact: the jar library: ``` mvn install:install-file -DgroupId=com.test -DartifactId=ssa -Dversion=1.0 -Dpackaging=jar -Dfile=ssa.jar ``` and the runtime library with the DLL ``` mvn install:install-file -DgroupId=com.sirio -Dpackaging=ddl -DartifactId=ssa-runtime -classifier=windows-x86 -Dversion=1.0 -Dfile=SSADll.dll ``` In my maven project I add these dependecies: ``` <dependency> <groupId>com.test</groupId> <artifactId>ssa</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>com.test</groupId> <artifactId>ssa-runtime</artifactId> <classifier>windows-${arch}</classifier> <type>dll</type> <version>1.0</version> <scope>runtime</scope> </dependency> ``` My problem is when I run the shade plugin goal to create a jar with dependencies, I get error: ``` Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:2.3:shade (default) on project ....: Error creating shaded jar: error in opening zip file sirio\ssa-runtime\1.0\ssa-runtime-1.0-windows-x86.dll ``` How can I tell the shade plugin to do not unpack the dll?

Original source