Java如何将dll文件打包到jar中?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java如何将dll文件打包到jar中?相关的知识,希望对你有一定的参考价值。

我使用jni写了一个dll,将dll文件放在jar文件根目录,jar中的程序可以正常访问dll,而我把dll打包到jar中,jar却无法找到这个dll文件了。之前我看过有的程序是可以把dll打包到jar中,并能够正常调用的。请问如何才能让程序正常调用jar中的文件?
希望大家说得清楚一些,把相关的代码段发上来。谢谢

//BIN_LIB为JAR包中存放DLL的路径   
//getResourceAsStream以JAR中根路径为开始点   
private synchronized static void loadLib(String libName) throws IOException    
    String systemType = System.getProperty("os.name");   
    String libExtension = (systemType.toLowerCase().indexOf("win")!=-1) ? ".dll" : ".so";   
       
    String libFullName = libName + libExtension;   
       
    String nativeTempDir = System.getProperty("java.io.tmpdir");   
       
    InputStream in = null;   
    BufferedInputStream reader = null;   
    FileOutputStream writer = null;   
       
    File extractedLibFile = new File(nativeTempDir+File.separator+libFullName);   
    if(!extractedLibFile.exists())   
        try    
            in = SMAgent.class.getResourceAsStream(BIN_LIB + libFullName);   
            if(in==null)   
                in =  SMAgent.class.getResourceAsStream(libFullName);   
            SMAgent.class.getResource(libFullName);   
            reader = new BufferedInputStream(in);   
            writer = new FileOutputStream(extractedLibFile);   
               
            byte[] buffer = new byte[1024];   
               
            while (reader.read(buffer) > 0)   
                writer.write(buffer);   
                buffer = new byte[1024];   
               
         catch (IOException e)   
            e.printStackTrace();   
         finally    
            if(in!=null)   
                in.close();   
            if(writer!=null)   
                writer.close();   
           
       
    System.load(extractedLibFile.toString());   
参考技术A 这个问题是由于 类加载器 造成的

ClassLoader

你对ClassLoader了解么?
你对 boot ClassLoader了解么?

如过不清楚的话,请查看一下 Java类加载机制.本回答被提问者采纳
参考技术B 建议看看CSDN上的这个帖子http://topic.csdn.net/t/20041015/09/3458094.html

如何将带包的java项目文件打包成jar

你那是java文件带包编译 啊 不是啊

是jar.exe

要如何建立Jar文件呢?只要使用JDK提供的Java的文件包工具,就是jar.exe,这个就可以将Java程序打包成一个jar文件了。其实就是一个压缩包形式的。

这个jar和JDK中的java或者javac 的用法差不多。

呵呵,以我的为例,我的JDK的安装路径是:D:\Program Files\Java\jdk1.5.0_12\bin

所以你想详细的查看jar怎么用就可以在命令提示符中输入:
D:\>cd Program Files\Java\jdk1.5.0_12\bin\jar

这样你就可以查看jar的使用了。

希望可以帮到你!
参考技术A 将生成的字节码文件放一个文件夹Tom(下一步方便点)、在文件夹下建立以后个文本文档写入你要打包的字节码文件main-class: myFrame(这个说明将myFrame.class打包、冒号后需空一格)、保存为1.txt
然后DOS进入..\Tom执行命令jar cvfm mm.jar 1.txt *.class这个命令表示将生成一个mm.jar文件
我也是刚学这个的、没听懂Hi我
参考技术B javac -d . **.java; 参考技术C 使用eclipse导出功能。。。 参考技术D 用法:jar ctxu[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...   
  选项:   
  -c 创建新的存档
  -t 列出存档内容的列表
  -x 展开存档中的命名的(或所有的〕文件
  -u 更新已存在的存档
  -v 生成详细输出到标准输出上
  -f 指定存档文件名
  -m 包含来自标明文件的标明信息
  -0 只存储方式;未用zip压缩格式
  -M 不产生所有项的清单(manifest〕文件
  -i 为指定的jar文件产生索引信息
  -C 改变到指定的目录,并且包含下列文件:  
  如果一个文件名是一个目录,它将被递归处理。   
  清单(manifest〕文件名和存档文件名都需要被指定,按'm' 和 'f'标志指定的相同顺序。

以上是关于Java如何将dll文件打包到jar中?的主要内容,如果未能解决你的问题,请参考以下文章

springboot java调用海康威视sdk 打包成jar后无法引用dll的问题

学习笔记eclipse打包Java项目(本项目引用外部jar包和dll动态链接文件)

学习笔记eclipse打包Java项目(本项目引用外部jar包和dll动态链接文件)

c#如何将一个类库打包成两个dll

C# 将dll打包到程序中

vc中如何将dll件和exe编译成一个exe文件?