Nasıl DLL dosyaları içeren bir JAR dosyası yapmak için?
JAR dosyası ve iki DLL dosyaları içerir üçüncü taraf Java kitaplık aldım. Üçüncü taraf JAR dosyasını çağırmak kendi Java programımı yazdım. Şimdi benim sorumnasıl benim kod ve üçüncü taraf KAVANOZ ve DLL içeren tek bir JAR dosyası içine tüm kod paketi alabilir miyim?
Teşekkürler.
S. S.
Biliyorumccböyle bir dava. Bu swt.jar DLL vardır, ama bunu yapmak için nasıl ve düzgün bir şekilde çalışması için nasıl bilmiyorum.
CEVAP
Sadece her yerde kavanoza paketi. Bir şey var akılda tutulması gereken ama önce kullanabilirsiniz Silmek gerekir aslında özü bu KAVANOZ ve dökümü bu da sabit disk üzerinde bir yerde aksi mümkün olmayacaktır yük bu
Bu jar savaş içinde paketlenmiş kullanacağım yerde yani aslında müşteri için bir proje yaptım JNI. Ancak, herhangi bir doğal yöntemleri çalıştırmadan önce bir kaynak olarak DLL ve temp dizini içine diske yazmak istiyorum. Sonra DLL sadece DLL yazdım aynı konuma ayarlandığı normal başlatma kodu çalıştırmak istiyorum
Oh, ve her ihtimale karşı: kavanoza ambalaj dll veya başka bir dosya ile ilgili özel bir şey yok. Zip içine paketleme şeyler gibi
Burada sadece kazılırken bazı kod
public class Foo {
private static final String LIB_BIN = "/lib-bin/";
private final static Log logger = LogFactory.getLog(ACWrapper.class);
private final static String ACWRAPPER = "acwrapper";
private final static String AAMAPI = "aamapi51";
private final static String LIBEAU = "libeay32";
static {
logger.info("Loading DLL");
try {
System.loadLibrary(ACWRAPPER);
logger.info("DLL is loaded from memory");
} catch (UnsatisfiedLinkError e) {
loadFromJar();
}
}
/**
* When packaged into JAR extracts DLLs, places these into
*/
private static void loadFromJar() {
// we need to put both DLLs to temp dir
String path = "AC_" new Date().getTime();
loadLib(path, ACWRAPPER);
loadLib(path, AAMAPI);
loadLib(path, LIBEAU);
}
/**
* Puts library to temp dir and loads to memory
*/
private static void loadLib(String path, String name) {
name = name ".dll";
try {
// have to use a stream
InputStream in = ACWrapper.class.getResourceAsStream(LIB_BIN name);
// always write to different location
File fileOut = new File(System.getProperty("java.io.tmpdir") "/" path LIB_BIN name);
logger.info("Writing dll to: " fileOut.getAbsolutePath());
OutputStream out = FileUtils.openOutputStream(fileOut);
IOUtils.copy(in, out);
in.close();
out.close();
System.load(fileOut.toString());
} catch (Exception e) {
throw new ACCoreException("Failed to load required DLL", e);
}
}
// blah-blah - more stuff
}
Nasıl birden fazla çalıştırmak için .B...
Nasıl bir OpenSSL almak için .pem dosy...
Nasıl Mercurial' 'hg' t...
Nasıl her dosya için bir şey yapmak iç...
Nasıl saklı satır içeren varolan bir S...