java एक जेएआर फ़ाइल कैसे बनाएं जिसमें डीएलएल फाइलें शामिल हों?




dll jar (2)

http://www.jdotsoft.com/JarClassLoader.php उपयोग http://www.jdotsoft.com/JarClassLoader.php जो असीमित घोंसले के साथ एक और जेएआर से डीएलएल और जेएआर लोड कर सकता है। उदाहरण के लिए, डीएलएल जार में हो सकता है जो एक और रूट जार में है। सभी डीएलएल और जेएआर लोड होते हैं जैसे कि वे क्लासपाथ या लाइब्रेरी पथ में हैं।

मैंने एक थर्ड-पार्टी जावा लाइब्रेरी खरीदी जिसमें एक जेएआर फ़ाइल और दो डीएलएल फाइलें शामिल हैं। मैंने अपना खुद का जावा प्रोग्राम लिखा जो तीसरे पक्ष की जेएआर फ़ाइल का आह्वान करता है। अब मेरा सवाल यह है कि मैं अपने सभी कोड को एक जेएआर फ़ाइल में कैसे पैकेज कर सकता हूं जिसमें मेरा सभी कोड और तृतीय पक्ष जेएआर और डीएलएल शामिल हैं?

मुझे पता है कि एसडब्ल्यूटी ऐसा मामला है। swt.jar में डीएलएल फाइलें शामिल हैं, लेकिन मुझे नहीं पता कि यह कैसे करें और इसे ठीक से कैसे काम करें।


बस इसे जार में कहीं भी पैकेज करें। एक बात आपको ध्यान में रखना है - इससे पहले कि आप डीएलएल का उपयोग कर सकें, आपको वास्तव में जेएआर से इन्हें निकालने की ज़रूरत है और हार्ड डिस्क पर कहीं भी डंप करें अन्यथा आप इन्हें लोड नहीं कर पाएंगे

तो मूल रूप से - मैंने क्लाइंट के लिए जेएनआई प्रोजेक्ट किया जहां मैं युद्ध के भीतर पैक किए गए ऐसे जार का उपयोग करूंगा। हालांकि - किसी मूल पद्धति को चलाने से पहले मुझे डीएलएल संसाधन के रूप में मिल जाएगा और इसे डिस्क पर temp निर्देशिका में लिखना होगा। फिर मैं नियमित प्रारंभिक कोड चलाता हूं जहां मेरा डीएलएल उसी स्थान पर सेट होता है जिसे मैंने अभी डीएलएल लिखा था

ओह, और बस मामले में: पैकेजिंग डीएल या किसी अन्य फ़ाइल के बारे में जार में कुछ खास नहीं है। यह ज़िप में पैकेजिंग सामान की तरह है

यहां कुछ कोड है जो मैंने अभी खोला है

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
}




packaging