Как динамически загружать AttachProvider (attach.dll)

Я использую com.sun.tools.attachиз jdk tools.jar, и ему нужен указанный java.library.path. ] env, указывающий на attach.dllпри запуске, чтобы правильно установить поставщика, такого как WindowsAttachProvider. По некоторым причинам мне нужна динамическая загрузка одной из связанных attach.dll. Я пытаюсь использовать что-то вроде этого:

public static void main(String[] args) throws Exception {
    Path bin = Paths.get(System.getProperty("user.dir"),"bin").toAbsolutePath();
    switch (System.getProperty("os.arch")) {
        case "amd64":
            bin = bin.resolve("win64");
            break;
        default:
            bin = bin.resolve("win32");
    }
    // Dynamic setting of java.library.path only seems not sufficient
    System.setProperty("java.library.path", System.getProperty("java.library.path") + File.pathSeparator + bin.toString());
    // So I try to manual loading attach.dll. This is not sufficient too.
    System.load(bin.resolve("attach.dll").toString());
    // I'm using com.sun.tools.attach in my app
    new myApp();
}

Если я запускаю это из jdk (в обычном jre), мне сообщается:

java.util.ServiceConfigurationError: com.sun.tools.attach.spi.AttachProvider:
Provider sun.tools.attach.WindowsAttachProvider could not be instantiated:
java.lang.UnsatisfiedLinkError: no attach in java.library.path
Exception in thread "main" com.sun.tools.attach.AttachNotSupportedException:
no providers installed
    at com.sun.tools.attach.VirtualMachine.attach(...

Как установить провайдера подключения без указания -Djava.library.pathуказать attach.dllпри запуске?

5
задан kbec 21 June 2012 в 08:18
поделиться