Come aggiungere la libreria nativa a "java.library.path" con il lancio di Eclipse (invece di prevalere)

StackOverflow https://stackoverflow.com/questions/661320

Domanda

Ho una biblioteca nativa a cui deve essere aggiunto java.library.path. Con argomento JVM -Djava.library.path = Path ... Posso impostare il percorso come voglio.

Il mio problema è che la mia altra libreria (Pentaho Reporting) cerca caratteri in base al Java.Library.Path predefinito (comprese le directory di sistema ecc.) E l'impostazione manuale sovrascrive il percorso predefinito.

Quindi: come posso Inserisci Una voce per il percorso a Java.Library.Path predefinita invece di prevalere (che sembra essere fatto con -djava.library.path)? (Non vorrei aggiungere a mano il percorso predefinito, il che non sarebbe bello per il bene della distribuzione)

EDIT: scusa per i dettagli mancanti; Sto lavorando con Eclipse. (La distribuzione è eseguita con JNLP e lì posso usare natilib sotto risorse)

È stato utile?

Soluzione

Avevo dimenticato questo problema ... In realtà stavo chiedendo con Eclipse, scusa per non averlo affermato originariamente. E la risposta sembra essere troppo semplice (almeno con 3,5; probabilmente anche con versioni precedenti):

Argomenti di Java Run Configuration: Argomenti VM:

-Djava.library.path="${workspace_loc:project}\lib;${env_var:PATH}"

Non deve dimenticare le virgolette, altrimenti ci sono problemi con gli spazi sul percorso.

Altri suggerimenti

Se vuoi aggiungere una libreria nativa senza interferire con java.library.path Al momento dello sviluppo in Eclipse (per evitare di includere percorsi assoluti e dover aggiungere parametri alla configurazione di lancio), è possibile fornire il percorso alla posizione delle librerie native per ciascun barattolo nel Java Build Path Dialoga sotto Posizione della biblioteca nativa. Si noti che il nome del file della libreria nativo deve corrispondere al nome del file jar. Vedi anche questo descrizione dettagliata.

SWT mette le DLL native necessarie in un barattolo. Cerca "org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar" per un esempio.

Le DLL devono essere nella radice del barattolo, il barattolo deve essere firmato e la DLL deve apparire con il checksum nel meta-inf/manifest.mf affinché la VM li prenda.

In Windows, come questo:

-Djava.library.path = "c:/mylibpath;%percorso%"

% Percorso% è il tuo vecchio -djava.library.path

https://bugs.eclipse.org/bugs/show_bug.cgi?id=102239 afferma che non esistono meccanici di sostituzione implementati nel lanciatore di Eclipse, almeno non per rilasciare Juno.

Quindi è (quasi) impossibile aggiungere o preparare un'altra cartella di libreria a Java.Library.Path al momento dell'avvio di Eclipse senza una conoscenza preliminare dell'impostazione predefinita.

Ho scritto quasi, perché dovrebbe essere possibile lasciare l'avvio di Eclipse, scaricare il contenuto di Java.Library.Path e interrompere Eclipse in un comando. La discarica sarebbe analizzata e quindi presa come input per il lancio di Eclipse, cioè

#!/bin/bash
# get default value of java.library.path (somehow)
default_lib_path=$( start_dump_stop_eclipse_somehow )  

# now launch Eclipse
eclipse --launcher.appendVmargs \
         -vmargs \
         -Djava.library.path="/my/native/lib/folder:${default_lib_path}"

Puoi girarti chiamando System.load () programmaticamente per caricare la tua libreria nativa? Questo metodo (a differenza di System.loadLibrary ()) consente di specificare un percorso assoluto.

Nei sistemi UNIX, è possibile aggiungere alla variabile di ambiente LD_Library_Path. Su Windows, JVM imposta automaticamente la proprietà del sistema, java.library.Path, sul percorso; Quindi, se la DLL è sul tuo percorso, allora sei impostato.

Finestra-> Preferenze-> java-> jres installati. Quindi scegli il tuo attuale JRE (JDK) e fai clic su Modifica. Riempi gli argomenti VM predefiniti: -djava.library.path =/usr/local/xuggler/lib. Fatto!

La soluzione offerta da Rob Elsner in uno dei commenti sopra funziona perfettamente (OSX 10.9, Eclipse Kepler). Bisogna aggiungere i loro percorsi aggiuntivi a quello separato da ":".

Puoi anche usare $ {System_Property: java.library.path} - Rob Elsner 22 novembre 10 alle 23:01

Il nome del file della libreria nativo deve corrispondere al nome del file jar. Questo è molto, molto importante. Assicurati che il nome del vaso e il nome DLL siano uguali. Inoltre, consulta il post di Fabian Steeg My Download for Jawin conteneva nomi diversi per DLL e JAR. Era Jawin.jar e Jawind.dll, notare extra 'd' nel nome del file DLL. L'ho semplicemente ribattezzato su jawin.dll e l'ho impostato come biblioteca nativa in Eclipse come menzionato nel post "http://www.eclipsezone.com/eclipse/forums/t49342.html"

Per qualche motivo non ho potuto far funzionare più cartelle (beh, ha fatto per un po ', ma non appena avevo bisogno di più DLL e ho aggiunto più cartelle, nessuna con spazi bianchi nel percorso). Ho quindi copiato tutte le DLL necessarie in una cartella e l'ho avuto come mio java.library.path E ha funzionato. Non ho una spiegazione - se qualcuno lo fa, sarebbe fantastico.

Molte delle risposte esistenti presumono che tu voglia impostare questo per un particolare progetto, ma dovevo impostarlo per Eclipse si Al fine di supportare l'autenticazione integrata per il driver JDBC SQL Server.

Per fare questo, ho seguito queste istruzioni Per il lancio di Eclipse dalla linea di comando Java invece del suo normale lanciatore. Quindi ho appena modificato quello script per aggiungere il mio argomento -djava.library.Path alla linea di comando Java.

Su Windows, ho scoperto che l'importante è Avvia Eclipse dalla riga di comando Piuttosto che dal menu Start o da un collegamento, a condizione che la DLL nativa sia in una directory nel tuo percorso. Apparentemente, questo garantisce che la directory corretta sia sul percorso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top