我必须在我的项目中添加一个JNI模块。
我在Maven中安装模块作为两个不同的工件:jar库:
mvn install:install-file -DgroupId=com.test -DartifactId=ssa -Dversion=1.0 -Dpackaging=jar -Dfile=ssa.jar
和带有DLL的运行时库
mvn install:install-file -DgroupId=com.sirio -Dpackaging=ddl -DartifactId=ssa-runtime -classifier=windows-x86 -Dversion=1.0 -Dfile=SSADll.dll
在我的maven项目中,我添加了这些依赖项:
<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>
我的问题是当我运行shade插件目标来创建一个带有依赖项的jar时,我收到错误:
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
如何告诉shade插件不要解压缩dll?
答案 0 :(得分:0)
此解决方案适用于我的JavaFX-OpenCV项目
DLL
个文件。DLL
文件复制并粘贴到jar文件目录中。DLL
文件现在都位于jar应用程序的类路径中。您的目录应如下所示:
/target/application.jar
/target/your_DLL_files.dll
答案 1 :(得分:0)
也许你需要的是不同的包装。使用您使用的所有 Java 类和库制作阴影 jar,然后将此 jar 和 DLL 一起打包在要发布的 Zip 文件中。为此,您可以使用带有 zip 描述符的 maven-assembly-plugin
,如下所示:
在您的 pom.xml
中:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>zip.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
在 zip.xml
文件中:
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
<id>release</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>target</directory>
<includes>
<include>myapp.jar</include>
</includes>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
<files>
<file>
<source>your.dll</source>
<fileMode>0644</fileMode>
</file>
</files>
</assembly>
这样你就可以在这个 zip 中释放你需要的一切。我不知道这是否是最好的解决方案,但也许它可以解决您的用例的问题。