一、问题背景

(1) sigar的使用

 sigar是一个开源的跨平台系统信息收集工具,C语言实现,使用简单。sigar API 依赖本地库文件工作的,内部通过java.library.path加载本地库文件,每次在新的环境下使用,需要将库文件添加到系统的java.library.path路径下。为了解决这个问题,将本地库文件添加到项目中,通过 java api 读取 sigar 路径,并将路径追加到 java.library.path中。(如果需要实现该功能的可以参考:添加sigar本地库到 java.library.path自定义代码实现

 (2)异常

项目启动后在,调用sigar获取操作系统信息抛出了如下异常 org.hyperic.sigar.SigarException: 项目路径\target\classes\sigar\sigar-amd64-winnt.dll: Can't load this .dll (machine code=0xbd)

on a AMD 64-bit platform

 (3)问题查找

maven项目开启了filtering,pom文件配置如下:

<resources>
   <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
   </resource>
</resources>

由于项目的maven配置设置了filtering为true,maven打包时会对recourses目录下的所有文件进行filtering处理,resources目录下的二进制文件会被修改,导致打包后无法正常使用。

二、解决办法

在maven resource plugin的配置下添加nonFilteredFileExtensions配置项,添加需要排除的二进制文件扩展名:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-resources-plugin</artifactId>
   <version>3.0.1</version>
   <configuration>
      <nonFilteredFileExtensions>
         <nonFilteredFileExtension>dll</nonFilteredFileExtension>
      </nonFilteredFileExtensions>
   </configuration>
   ...
</plugin>

添加上述配置后maven打包则会阻止对扩展名为上述配置中的文件进行filtering处理。

参考文章:https://maven.apache.org/plugins/maven-resources-plugin/examples/binaries-filtering.html

 

 

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐