当前位置: 首页 > 知识库问答 >
问题:

使用fat jar部署时,外部库不可用

鲜于温书
2023-03-14

我在我的程序中使用了bluecove库
通过eclipse运行程序时,一切都很顺利。我现在正在尝试部署我的程序,在这篇文章之后,我使用了胖jar
当我运行jar文件(由fat jar创建)时,找不到库,并且由于这行代码local=LocalDevice,我得到了异常BlueCove库不可用。getLocalDevice()

在Fat-jar窗口中,我还尝试将bluecove-2.1.0.jar添加Class-Path位置,并使用路径\src\JoJoServer\bluecove-2.1.0.jar
我还尝试将Bluecove的jar文件放在不同的文件夹中,例如src或外部文件夹。

虽然我知道这不是推荐的,但我尝试了一个罐子的选择,尽管它没有帮助。

要运行jar(由胖jar创建的),我只需双击文件。
我错过了什么?

这是整个代码:

import java.io.IOException;
import javax.bluetooth.BluetoothStateException;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.LocalDevice;
import javax.bluetooth.UUID;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
import javax.microedition.io.StreamConnectionNotifier;

@Override
public void run() {
    // retrieve the local Bluetooth device object
    LocalDevice local = null;
    StreamConnectionNotifier notifier;
    StreamConnection connection = null;

    // setup the server to listen for connection
    try {
        local = LocalDevice.getLocalDevice();
        local.setDiscoverable(DiscoveryAgent.GIAC);

        UUID uuid = new UUID("0000110100001000800000805F9B34FB", false);
        System.out.println(uuid.toString());

        String url = "btspp://localhost:" + uuid.toString() + ";name=RemoteBluetooth";
        notifier = (StreamConnectionNotifier)Connector.open(url);
    } catch (BluetoothStateException e) {
        System.out.println("Bluetooth is not turned on.");
        e.printStackTrace();
        return;
    }

    // ...
}

共有1个答案

慕铭
2023-03-14

我不知道你有什么问题,但我已经尝试了这个过程,一切都很好,所以我只是总结一下我所做的。也许你会跟着它走。。。

我不明白发布的代码怎么可能是完整的,我看不到类定义。:)因此,我将其修改为main方法,它既可以在Eclipse中工作,也可以通过运行FatJar生成的JAR来工作。

BTTest类的修改代码:

package test;

import java.io.IOException;
import javax.bluetooth.BluetoothStateException;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.LocalDevice;
import javax.bluetooth.UUID;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
import javax.microedition.io.StreamConnectionNotifier;

public class BTTest {

    public static void main(String[] args) throws Exception{
        // retrieve the local Bluetooth device object
        LocalDevice local = null;
        StreamConnectionNotifier notifier;
        StreamConnection connection = null;

        // setup the server to listen for connection
        try {
            local = LocalDevice.getLocalDevice();
            local.setDiscoverable(DiscoveryAgent.GIAC);

            UUID uuid = new UUID("0000110100001000800000805F9B34FB", false);
            System.out.println(uuid.toString());

            String url = "btspp://localhost:" + uuid.toString()
                    + ";name=RemoteBluetooth";
            notifier = (StreamConnectionNotifier) Connector.open(url);
        } catch (BluetoothStateException e) {
            System.out.println("Bluetooth is not turned on.");
            e.printStackTrace();
            return;
        }

        // ...
    }
}

为了运行或生成它,我刚刚将bluecove库放在构建路径中,并用一种简单的方法创建了胖jar:http://oi60.tinypic.com/vg1jpt.jpg

从命令行启动生成的jar:

D:\testProjects\bttest>java -jar bttest_fat.jar
BlueCove version 2.1.0 on winsock
0000110100001000800000805f9b34fb
BlueCove stack shutdown completed

你能给你的流程贴一个不同的标签吗?

 类似资料:
  • 我正在完成一个项目,我必须将它部署为一个jar文件,在eclipse中它工作得很好,我的项目依赖于两个库,这两个库也都依赖于dll文件。我已经将这些DLL的路径添加到每个外部JAR的本机库位置。然后,我使用eclipse可运行的jar文件导出向导将project导出为一个jar文件我在指定的位置得到了jar文件,它运行了,但是当我单击一个调用我得到的库之一的按钮时,我得到了java.lang.Un

  • 介绍如何搭建云联壹云高可用环境。 高可用部署方案介绍 云联壹云 平台高可用至少需要3个及3个以上的节点组成高可用环境;高可用环境将会自动部署MINIO作为共享存储,MINIO默认挂载在其中一个节点,当该节点宕机后,将会自动挂载到其他的节点上。 3节点版 使用3个节点部署高可用环境时,需要在2个节点上部署数据库高可用以及 云联壹云 平台高可用, 该方案只能保证部署高可用的2个节点中的其中一个宕机而不

  • Seata 的高可用依赖于注册中心、配置中心和数据库来实现 Seata-Server Seata-Server 需要使用注册中心,并把事务数据保存到数据库中,以 Nacos 为例 修改registry.conf的注册中心配置 registry { type = "nacos" nacos { application = "seata-server" serverAddr

  • 我的ant-script和Tomcat有问题。我想创建一个ant-scipt,它使用Jenkins在我的tomcat-server上构建、编译和部署我的GWT应用程序。为此,我使用来自catalina(catalina-ant.jar)的undeploy and deploy任务。但是我得到了这个错误: 构建失败d:\jenkins\jobs\homepageTomcat\workspace\BU

  • 问题内容: 我正在x86 ubuntu机器上为树莓派ARM目标编写一些代码。我正在使用gcc-linaro- armhf工具链。我能够交叉编译并在pi上运行一些独立程序。现在,我想将代码与外部库(例如ncurses)链接。我该如何实现。 我应该将程序与主机上现有的ncurses lib链接,然后在ARM上运行吗?(我认为这行不通)我是否需要为arm获取lib的源代码或预构建版本,将其放在我的lib

  • Fabric 是一个 Python 下类似于 Makefiles 的工具,但是能够在远程服务器上 执行命令。如果您有一个良好配置过的 Python 软件包 (大型应用) 且 对“配置”概念的理解良好,那么在外部服务器上部署 Flask 应用将会非常容易。 开始之前,请先检查如下列表中的事项是否都已经满足了: 在本地已经安装了 Fabric 1.0 。即这个教程完成时, Fabric 的最新版本。