Eclipse başlatma ile "java.library.path" dosyasına yerel kitaplık nasıl eklenir (geçersiz kılmak yerine)


92

Java.library.path'e eklenmesi gereken yerel bir kitaplığım var . JVM argümanıyla -Djava.library.path = yol ... Yolu istediğim gibi ayarlayabilirim.

Benim sorunum, diğer kitaplığımın (pentaho raporlama) fontları varsayılan java.library.path (sistem dizinleri vb. Dahil) temelinde araması ve manuel ayarın varsayılan yolu geçersiz kılmasıdır.

Öyleyse: varsayılan java.library.path'e onu geçersiz kılmak yerine nasıl yol girişi ekleyebilirim (bu -Djava.library.path ile yapılmış gibi görünüyor)? (Varsayılan yolu elle eklemek istemezdim, bu dağıtım uğruna iyi olmaz)

DÜZENLEME: Eksik ayrıntılar için özür dilerim; Eclipse ile çalışıyorum. (Dağıtım JNLP ile yapılır ve orada nativelib'i kaynaklar altında kullanabilirim )


1
lütfen bunun yerine bu soru için kabul edilen cevabı görün - benim için çok daha iyi: stackoverflow.com/questions/957700/…
laher

"Yerel kitaplığın nasıl ekleneceği" sorusu kafa karıştırıcıdır. Muhtemelen başka bir "kitaplık yolu" eklemek (eklemek veya eklemek) ile ilgilidir, yani Eclipse'in varsayılan olarak java.library.path = yol1: yol2: yol3 gibi bir şey gösterdiğini varsayarsak, soru Eclipse'in java.library ile biten nasıl başlatılacağıdır. .path = benim / lib / klasörüm: yol1: yol2: yol3
whaefelinger

Yanıtlar:


46

Bu konuyu unutmuştum ... Aslında Eclipse ile soruyordum, bunu orijinal olarak belirtmediğim için üzgünüm. Ve cevap çok basit görünüyor (en azından 3.5 ile; muhtemelen eski sürümlerde de):

Java, yapılandırmanın bağımsız değişkenlerini çalıştırır:

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

Tırnak işaretlerini unutmamak gerekir, aksi takdirde PATH'de boşluklarla ilgili sorunlar vardır.


7
Biri diğerine bağlı iki paylaşımlı kitaplık varsa bu çalışmayacaktır. Birincisi Java çalışma zamanı tarafından bulunur, ancak ikincisi sistem dinamik yükleyicisi tarafından çözülür. Bulduğum tek çözüm LD_LIBRARY_PATH ayarlamaktır.
kevin cline

4
@Touko tarafından verilen cevap, yerel bir kütüphane klasörünün eklenmesi veya başına eklenmesi ile ilgili orijinal soruya uymuyor. En azından Mac OS 10.8'de, ne $ PATH ne $ LD_LIBRARY_PATH ne de $ {workspace_loc: project} \ lib varsayılan değerle bir ilgiye sahip değildir. Örneğin, Mac'imde varsayılan değer $ HOME / Library / Java / Extensions: / Library / Java / Extensions: / Network / Library / Java / Extensions: / System / Library / Java / Extensions: / usr / lib / java :.
whaefelinger

Eclipse'de TestNG kullanıyorsanız, TestNG çalıştırma yapılandırmasını düzenlemeniz gerekir: - Yapılandırmaları Çalıştır penceresinde, hedef TestNG yapılandırmanızı seçin. - Ortam sekmesini seçin - Bir PATH değişkeni ekleyin ve değerini hedefinize ayarlayın - Varsayılan "Ortamı yerel ortama ekle" geçişini bırakın.
Philippe

Bir örnek alabilir miyim?
basickarl

@kevincline, bu durumda tam olarak neden işe yaramayacağını açıklar mısınız? Bu problemle yeni karşılaştım ve bu çözümde neyin yanlış olduğunu anlamaya çalışıyorum.
anula

14

java.library.pathEclipse'de geliştirme sırasında müdahale etmeden yerel bir kitaplık eklemek istiyorsanız (mutlak yollar dahil etmekten ve başlatma yapılandırmanıza parametreler eklemek zorunda kalmamak için), Java Derlemesindeki her Jar için yerel kitaplık konumuna giden yolu sağlayabilirsiniz. Yerel kitaplık konumu altındaki Yol iletişim kutusu . Yerel kitaplık dosyası adının Jar dosyası adına karşılık gelmesi gerektiğini unutmayın. Ayrıca bu ayrıntılı açıklamaya bakın .


3
-1. Son kullanıcının uygulamayı bir IDE'den çalıştırdığını varsayarsınız, ki bu olası değildir.
finnw

@finnw Ne demek istediğini anladım. Geliştirme sırasında IDE'ye yerel bir kitaplığın nasıl ekleneceğine dair bir çözüm arayan soruyu, geçersiz kılmadan java.library.pathbuldum ve çözümü başka bir yerde bulduktan sonra geri döndüm. Bunu daha net hale getirmek için cevabımı düzenleyeceğim.
Fabian Steeg

Aslında soruda bahsetmemiş olsam da Eclipse ile çalışıyorum.
Touko

Bu aslında Eclipse (Luna) 'nın şu anki sürümünde çalışmaz çünkü özelliğin ayarlanması, kullanıcının soruda bir sorun olarak tanımladığı gibi java.library.path'i geçersiz kılar.
Alex N.

9

SWT, gerekli yerel DLL'leri bir JAR'a koyar. Örnek için "org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar" araması yapın.

DLL'lerin JAR'ın kökünde olması, JAR'ın imzalanması ve VM'nin onları alması için META-INF / MANIFEST.MF'de DLL'nin sağlama toplamı ile birlikte görünmesi gerekir.


2
NetBeans ile bunu nasıl yapabilirim?
Maciek Sawicki

AFAIK, NetBeans projeyi oluşturmak için Ant'ı kullanır. Ant ile ilgili belgeleri nasıl imzalı JAR'lar oluşturacağınızı ve DLL'ler gibi şeyleri bildirime nasıl koyacağınızı okuyun.
Aaron Digulla

Eclipse'de .dll'yi eklemek için nasıl ayarlarım?
NoBugs

@NoBugs: Eclipse'de, bu gönderi yardımcı olmalıdır: eclipsezone.com/eclipse/forums/t49342.html
Aaron Digulla

@AaronDigulla, DLL'nin her zaman bu şekilde eklenmesini önerir misiniz? Sadece şöyle bir şey aradığını düşündüm java.library.path. Sadece kökünü aradığını mı söylüyorsun jar?

4

Windows'ta şunun gibi:

-Djava.library.path = "C: / MyLibPath;% PATH%"

% PATH% eski -Djava.library.path dosyanızdır


Bu fikri denedim, ancak java.library.path olarak sonuçlandı: D: \ Workspace \ myProject \ lib;% PATH%
Touko

$ {System_property: java.library.path}
Rob Elsner

2
UNIX / Mac / GNU Linux'ta varsayılan LD_LIBRARY_PATH'dir. PATH bir Windows şeydir.
whaefelinger


2

https://bugs.eclipse.org/bugs/show_bug.cgi?id=102239 , Eclipse'in başlatıcısında hiçbir ikame mekaniğinin uygulanmadığını, en azından Juno'yu yayınlayamadığını belirtir.

Bu nedenle, varsayılan ayara ilişkin önceden bilgi sahibi olmadan Eclipse'i başlatırken java.library.path'e başka bir kitaplık klasörü eklemek veya başına eklemek (neredeyse) imkansızdır.

Neredeyse yazdım, çünkü tek bir komutta Eclipse'in başlatılmasına izin verilebilir, java.library.path içeriğinin dökümü ve Eclipse durdurulabilir. Döküm ayrıştırılır ve ardından Eclipse'i başlatmak için girdi olarak alınır.

#!/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}"

1

UNIX sistemlerinde, LD_LIBRARY_PATH ortam değişkenine ekleyebilirsiniz. Windows'ta JVM, java.library.path sistem özelliğini otomatik olarak PATH değerine ayarlar; bu yüzden eğer dll PATH'inizdeyse, hazırsınız demektir.


İş parçacığı başlatıcı, ikinci bir yerel kitaplık klasörünün nasıl "ekleneceği" konusunda çok spesifikti, değil mi?
whaefelinger

@ user667073 Ben de aynısını söylüyorum ... Soru EK, iş parçacığı başlatıcı paylaşılan bir kütüphaneyi başka türlü nasıl yükleyeceğini zaten biliyor ;-)
Ustaman Sangat

STS 3.4.0 ve Mac OS 10.8: LD_LIBRARY_PATH ayarlarının java.library.path üzerinde herhangi bir etkisi yoktur. Bunu Subclipse / JavaHL ile test ettim. Bu çalıştı: STS --launcher.appendVmargs -vmargs -Djava.library.path = / opt / local / lib dışa aktarılırken LD_LIBRARY_PATH = / opt / local / lib; STS negatifti.
whaefelinger

1

Pencere-> Tercihler-> Java-> Yüklü JRE'ler. Ardından mevcut JRE'nizi (JDK) seçin ve Düzenle'yi tıklayın. Varsayılan Sanal Makine Değişkenlerini Doldur: -Djava.library.path = / usr / local / xuggler / lib. Bitti!


1
Bu yanıt faydasızdır çünkü iş parçacığı başlatıcı özellikle "[..] geçersiz kılmak yerine yerel bir kitaplık [..] nasıl eklenir" sorusunu sorar. Bu cevap sadece varsayılan ayarı geçersiz kılar.
whaefelinger

1

Yukarıdaki yorumlardan birinde Rob Elsner tarafından sunulan çözüm mükemmel çalışıyor (OSX 10.9, Eclipse Kepler). Ek yollarını ":" ile ayrılmış yola eklemelisiniz.

$ {System_property: java.library.path} - Rob Elsner Kasım 22 '10, 23:01 de kullanabilirsiniz.


0

Yerel kitaplık dosyası adı, Jar dosyası adına karşılık gelmelidir. Bu çok çok önemli. Lütfen jar adı ile dll adının aynı olduğundan emin olun. Ayrıca, lütfen Fabian Steeg gönderisine bakın Jawin için indirdiğim dosya dll ve jar için farklı isimler içeriyordu. Jawin.jar ve jawin d .dll idi, dll dosya adına ekstra 'd' not edin. Sadece jawin.dll olarak yeniden adlandırdım ve " http://www.eclipsezone.com/eclipse/forums/t49342.html " yazısında belirtildiği gibi tutulmada yerel bir kitaplık olarak ayarladım


Soru, Eclipse'i başlatırken yerel bir kitaplık (klasör) eklemekle ilgilidir.
whaefelinger

0

Bazı nedenlerden dolayı birden fazla klasörün çalışmasını sağlayamadım (iyi bir süre oldu ama daha fazla dll'ye ihtiyaç duyduğumda ve daha fazla klasör ekledikten sonra hiçbiri yolda beyaz boşluklar olmadan). Daha sonra gerekli tüm dll'leri bir klasöre kopyaladım ve bunu java.library.path olarak aldım ve işe yaradı. Bir açıklamam yok - eğer biri olursa harika olur.


Peki, java.library.path aracılığıyla yerel bir kitaplık bulunursa ve başka birini bu klasöre kopyalarsanız, ikincisinin de bulunması doğal görünür, değil mi?
whaefelinger

Tabii ki, onu bu yüzden kullandım, ha! Merak ettiğim şey, eşyaların taşınmasına veya sembolik bağlara bağlanmasına gerek kalmadan birden fazla klasör eklenip eklenemeyeceğiydi.
Ustaman Sangat

0

Varolan cevaplar çoğu belirli bir proje için bu ayarlamak istediğiniz varsayalım, ama Eclipse için ayarlamanız için gerekli kendisini SQL Server JDBC sürücüsü için tümleşik kimlik doğrulaması desteklemek için.

Bunu yapmak için Eclipse'i normal başlatıcısı yerine Java komut satırından başlatmak için bu talimatları izledim . Sonra bu komut dosyasını, -Djava.library.path argümanımı Java komut satırına eklemek için değiştirdim.


0
  1. Windows'ta: Kitaplığa giden yolu PATH ortam değişkenine ekleyin.
  2. Linux'ta: Kitaplık yolunu LD_LIBRARY_PATH ortam değişkenine ekleyin.
  3. Mac'te: Kitaplığın yolunu DYLD_LIBRARY_PATH ortam değişkenine ekleyin.

java.library.path yukarıdaki değişkenlerin değerleri ile karşılık gelen platformda başlatılır.

Bu, herhangi bir IDE üzerinde çalışmalıdır.

Arayarak değerin beklediğiniz gibi olup olmadığını test edebilirsiniz. java -XshowSettings:properties


-2

Windows'ta, yerel DLL'nin PATH'inizdeki bir dizinde olması koşuluyla , önemli olanın Eclipse'i Başlat Menüsü veya bir kısayol yerine komut satırından başlatmak olduğunu buldum . Görünüşe göre, bu doğru dizinin yolda olmasını sağlar.


Yanılıyorsam düzeltin, ancak Windows'daki geçerli çalışma dizininin DLL'leri (veya çalıştırılabilir ikili dosyaları) ararken otomatik olarak eklendiğini düşünüyorum. Böylece DLL'lerin bulunduğu klasöre geçip sonra Eclipse'i başlattığınızda, evet, aradığınız DLL'ler bulunur. Bunun dışında, konu başlatıcı sorusu ile bu yanıtın nasıl bir ilişkisi var?
whaefelinger
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.