Search code examples
javamavensikulinative-codemultiplatform

How to create multiplatform executable jar with native libraries for sikulix api using maven pom.xml?


I have problem creating executable single jar dependent on sikulixapi.

Relevant parts from pom.xml

<dependencies>
    <dependency>
            <groupId>com.sikulix</groupId>
            <artifactId>sikulixapi</artifactId>
            <version>1.1.0</version>
    </dependency>
</dependencies>

I am using maven-assembly-plugin.

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <descriptorRefs>
           <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>                                          
                <mainClass>com.myProject.myClass</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>                    
    </executions>                                                
</plugin>

I am able to produce working jar on windows. jar contains sikulixlibs directory in jar root and everything works OK on windows platform.

But I would like to produce jar working multiplatform. jar created on windows contains only windows subdirectory in sikulixlibs and due to this fact there are missing native binary code when calling in linux.

[error] RunTimeINIT:  *** terminating: libs to export not found on above classpath: /sikulixlibs/linux/libs64

How to include all linux/windows/OSX native libraries into produced jar?


Solution

  • I have edited dependecies part od pom.xml, add additional maven artifacts, one for every supported OS, and make maven producing jar including all native libraries.

    <dependencies>
        <dependency>
            <groupId>com.sikulix</groupId>
            <artifactId>sikulixapi</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.sikulix</groupId>
            <artifactId>sikulixlibslux</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.sikulix</groupId>
            <artifactId>sikulixlibsmac</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.sikulix</groupId>
            <artifactId>sikulixlibswin</artifactId>
            <version>1.1.0</version>
        </dependency>
    </dependencies>