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

时间:2014-10-25 19:28:20

标签: java deployment jar bluetooth bluecove

我在我的程序中使用bluecove库。
在通过eclipse运行程序时,一切顺利。我现在正在尝试部署我的程序,并在this发布后使用fat-jar发布。
当我运行jar文件(由fat-jar创建)时,无法找到该库,并且由于此行BlueCove libraries not available而导致异常local = LocalDevice.getLocalDevice();

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

虽然我不知道它不推荐,但我尝试了One-Jar选项,但它没有帮助。

要运行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;
    }

    // ...
}

enter image description here

1 个答案:

答案 0 :(得分:0)

我不知道你的问题是什么,但我已经尝试了这个过程,一切正常,所以只是我做了什么的摘要。也许你会通过追随它来弄明白......

我不明白发布的代码怎么可能是整个,我看不到类定义。 :) 所以我将它修改为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

您可以在流程中发布差异吗?