मैंने इस पर बहुत से लेख/स्पष्टीकरण पढ़े हैं और बहुत सारे घंटे बिताए हैं, लेकिन सब कुछ या तो व्यापक या विशिष्ट है।एकाधिक जारों को एक में कैसे मिलाएं?
यह प्रश्न वास्तव में केवल मेरे द्वारा किए गए ऐप्पल पर लागू होता है। इसमें एक कक्षा है, और 2 अन्य जार पुस्तकालयों की आवश्यकता है। मैंने इन परियोजनाओं में शामिल किया है (कई परियोजनाएं, क्योंकि मैंने नेटबीन्स और एक्लिप्स में यह कोशिश की है ... एक कक्षा प्रोजेक्ट को फिर से बनाना आसान है)। इन सब का मुद्दा यह है कि मेरे एचटीएमएल/वेब प्रोजेक्ट को एक से अधिक जार से निपटना या उन्हें संदर्भित नहीं करना चाहिए। यह बिल्कुल जटिल एप्लेट/प्रोजेक्ट नहीं है।
मूल रूप से, मैंने इसे नेटबीन में बनाया। इसमें मुख्य पैकेज है, और 2 जार जोड़ने के बाद, उन्हें "पुस्तकालय" क्षेत्र ("संसाधन" फ़ोल्डर) में रखा जाता है। इसे बनाने के बाद, नेटबीन्स मेरे एक पैकेज/कक्षा के लिए एक जार बनाता है, और उसके बाद 2 अन्य पुस्तकालयों को इसके आगे "lib" निर्देशिका में रखता है। मैं उन्हें एक, वितरित जार में होना चाहता हूं। मैंने देखा है कि कई चीजों से, मैंने build.xml में निम्नलिखित डालने का प्रयास किया है:
<target name="YourBigJar" depends="-post-jar">
<jar destfile="dist/BigJar.jar">
<zipfileset src="dist/cxapplet.jar"/>
<zipfileset src="resources/dpotapi.jar"/>
<zipfileset src="resources/dpotjni.jar"/>
</jar>
</target>
लेकिन यह कुछ भी नहीं पैदा करता है। मुझे यह NetBeans - deploying all in one jar से मिला है। मैं build.xml का उपयोग करने के बारे में नहीं जानता/समझता हूं, इसलिए अगर कुछ गलत हो रहा है तो मुझे आश्चर्य नहीं होगा (स्पष्ट रूप से), लेकिन मुझे कोई त्रुटि/चेतावनी संदेश नहीं मिला है।
जब मैंने इसे ग्रहण में बनाया, तो यह प्रभावी रूप से उन्हें जोड़ता है, लेकिन जब मैं अपने वास्तविक वेब प्रोजेक्ट में जार का उपयोग करता हूं, तो यह कहता है कि यह अन्य 2 जारों से कक्षाएं नहीं ढूंढ सकता है। मैं समझ नहीं पा रहा हूं कि इसे कैसे ठीक किया जाए, लेकिन क्या यह क्लासपाथ समस्या है? ग्रहण में, मैं "lib" नामक एक नई निर्देशिका बनाता हूं और इसमें जार डालता हूं। फिर, मैं प्रोजेक्ट पर राइट-क्लिक करता हूं, "जावा बिल्ड पथ" पर जाता हूं, और जार जोड़ता हूं, उन्हें "ऑर्डर एंड एक्सपोर्ट" टैब के अंतर्गत भी चेक करता हूं। मैंने जो चीजें पढ़ी हैं, मैंने प्रोजेक्ट पर राइट-क्लिक करें, "एक्सपोर्ट" चुनें, "जार" चुनें, ".classpath" और ".project" फ़ाइलों को अनचेक करें, केवल "जेनरेट की गई क्लास फाइलों और संसाधनों को निर्यात करें" की जांच करें, और उसके बाद इसे मैनिफेस्ट फ़ाइल उत्पन्न करने की अनुमति दें। जैसे मैंने कहा, यह एक जार उत्पन्न करता है, लेकिन इसकी सामग्री मेरा पैकेज है और फिर एक "lib" निर्देशिका है जिसमें 2 अन्य जार हैं। घोषणापत्र वहां है, लेकिन यह बहुत खाली है और किसी भी फाइल का संदर्भ नहीं देता है (सुनिश्चित नहीं है कि यह महत्वपूर्ण है)। जब मैं इसे अपने वेब ऐप में डालता हूं, तो यह कहता है कि एप्लेट अन्य वर्गों को नहीं ढूंढ सकता है।
यह इतना आसान लगता है - एक पैकेज/कक्षा, दो बाहरी जार ... एक एप्लेट के रूप में वितरण के लिए बनाया गया जब एक जार में गठबंधन। कोई विचार?
अद्यतन:
जब से हम Maven का उपयोग शुरू किया, किसी को एक Maven प्लगइन का उपयोग करते हुए देखा। इसलिए हम एप्लेट घर (क्योंकि यह कई परियोजनाओं भर में प्रयोग किया जाता है) एक नई परियोजना बना दी, और अंत में हमारे pom.xml
में यह प्रयोग किया जाता है,:
<build>
<resources>
<resource>
<directory>${basedir}/applet</directory>
<excludes>
<exclude>codesignstore</exclude>
</excludes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>cxapplet</finalName>
<archive>
<index>true</index>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-my-applet-jar</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jarsigner-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>sign</id>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
<configuration>
<keystore>${basedir}/applet/codesignstore</keystore>
<alias>codesigncert</alias>
<storepass>HIDDEN</storepass>
<keypass>HIDDEN</keypass>
</configuration>
</plugin>
</plugins>
</build>
और यह अच्छा था क्योंकि यह उपयोग करने के लिए हमें की अनुमति हमारे कोड हस्ताक्षर प्रमाणपत्र स्वचालित रूप से इसे भी हस्ताक्षर करने के लिए।
* "यह सब बात यह है कि मेरे एचटीएमएल/वेब प्रोजेक्ट को एक से अधिक जार से निपटना नहीं चाहिए" * ऐसा करने के लिए यह छोटा है ताकि ब्राउजर इसे संभाल सके। * "कोई विचार?" * जार को सामान्य तरीके से तैनात करें (जिसमें आपकी वर्तमान रणनीति के फायदे हैं) और स्वयं को समय बचाएं। –
एक जार की निर्भरता को दूसरे में बेहतर बनाना बेहतर है। कई जार बनाने के उपकरण आपके काम को आसान बनाते हैं। –
@joeyrohan मुझे यकीन नहीं है कि आपका क्या मतलब है, लेकिन यही कारण है कि मैं नेटबीन्स और ग्रहण के निर्माण उपकरण का उपयोग करने की कोशिश कर रहा हूं, जिसे मैंने सोचा था, इसे पूरा करने के लिए। – Ian