classpath
অন্য জাআর ফাইলের মধ্যে থাকা একটি জেআর ফাইল অন্তর্ভুক্ত এমন একটি জাভা নির্দিষ্ট করা কি সম্ভব ?
classpath
অন্য জাআর ফাইলের মধ্যে থাকা একটি জেআর ফাইল অন্তর্ভুক্ত এমন একটি জাভা নির্দিষ্ট করা কি সম্ভব ?
উত্তর:
যদি আপনি এমন একটি জার তৈরি করার চেষ্টা করছেন যা আপনার অ্যাপ্লিকেশন এবং এটির প্রয়োজনীয় গ্রন্থাগারগুলি ধারণ করে, তবে এটি করার জন্য দুটি উপায় (যা আমি জানি)। প্রথমটি হ'ল ওয়ান-জার , যা ঘড়ের বাসা বাঁধার অনুমতি দেওয়ার জন্য একটি বিশেষ শ্রেণীবদ্ধকারী ব্যবহার করে। দ্বিতীয়টি হলেন উবারজার , (বা ছায়া ), যা অন্তর্ভুক্ত লাইব্রেরিগুলি বিস্ফোরিত করে এবং সমস্ত শ্রেণিকে শীর্ষ স্তরের জারে রাখে।
আমার আরও উল্লেখ করা উচিত যে উবারজার এবং শেড যথাক্রমে মাভেন 1 এবং মাভেন 2 এর প্লাগইন। নীচে উল্লিখিত হিসাবে, আপনি অ্যাসেম্বলি প্লাগইনও ব্যবহার করতে পারেন (যা বাস্তবে আরও শক্তিশালী তবে সঠিকভাবে কনফিগার করা অনেক কঠিন)।
আপনি "বিস্ফোরণে জেআর বিষয়বস্তু" সমাধানগুলি ব্যবহার করতে চান না। তারা অবশ্যই স্টাফগুলি দেখতে শক্ত করে তোলে (যেহেতু সবকিছু একই স্তরে বিস্ফোরিত হয়)। তদতিরিক্ত, নামকরণের দ্বন্দ্ব থাকতে পারে (লোকেরা যথাযথ প্যাকেজ ব্যবহার করলে তা হওয়া উচিত নয়, তবে আপনি সর্বদা এটি নিয়ন্ত্রণ করতে পারবেন না)।
আপনি যে বৈশিষ্ট্যটি চান তা হ'ল শীর্ষ 25 সান আরএফইগুলির মধ্যে একটি : আরএফই 4648386 , যা সূর্য তাদের অসীম জ্ঞানের ভিত্তিতে নিম্ন অগ্রাধিকার হিসাবে চিহ্নিত করেছে। আমরা কেবল আশা করতে পারি যে সূর্য জাগবে ...
ইতিমধ্যে, আমি যে সর্বোত্তম সমাধানটি এসেছি (যা আমি আশা করি যে সান জেডিকে অনুলিপি করবে) হ'ল কাস্টম শ্রেণীর লোডার জারক্লাসলোডার ব্যবহার করা ।
activation.jar
)।
কিছু গবেষণার পরে আমি এমন একটি পদ্ধতি খুঁজে পেয়েছি যার জন্য ম্যাভেন বা কোনও তৃতীয় পক্ষের এক্সটেনশন / প্রোগ্রামের প্রয়োজন হয় না।
আপনি আপনার ম্যানিফেস্ট ফাইলটিতে "ক্লাস-পাথ" ব্যবহার করতে পারেন।
উদাহরণ স্বরূপ:
ম্যানিফেস্ট ফাইল MANIFEST.MF তৈরি করুন
Manifest-Version: 1.0
Created-By: Bundle
Class-Path: ./custom_lib.jar
Main-Class: YourMainClass
আপনার সমস্ত ক্লাস সংকলন করুন এবং চালান jar cfm Testing.jar MANIFEST.MF *.class custom_lib.jar
c
সংরক্ষণাগার তৈরির অর্থ দাঁড়ায়
f
যে আপনি ফাইলটি নির্দিষ্ট করতে চান
v
ভারবোজ ইনপুট
m
মানে আমরা কাস্টম ম্যানিফেস্ট ফাইলটি পাস করব
নিশ্চিত হয়ে নিন যে আপনি জার প্যাকেজে লিব অন্তর্ভুক্ত করেছেন। আপনার স্বাভাবিক উপায়ে জার চালাতে সক্ষম হওয়া উচিত।
এর উপর ভিত্তি করে: http://www.ibm.com
ক্লাস-পাথ সম্পর্কে আপনার অন্য সমস্ত তথ্য আপনি এখানে দেখতে পান
custom_lib.jar
, জারটি আর কার্যকর করা যায় না :(
ব্যবহার করুন zipgroupfileset ট্যাগ (ক হিসাবে একই বৈশিষ্ট্য ব্যবহার fileset ট্যাগ); এটি ডিরেক্টরিতে সমস্ত ফাইল আনজিপ করে আপনার নতুন সংরক্ষণাগার ফাইলে যুক্ত করবে। আরও তথ্য: http://ant.apache.org/manual/Tasks/zip.html
জার-ইন-এ-জার সমস্যাটি ঘুরে দেখার এটি খুব দরকারী উপায় - আমি জানি কারণ আমি কী করতে হবে তা জানার চেষ্টা করার সময় এই সঠিক স্ট্যাকওভারফ্লো প্রশ্নটি গুগল করেছি। আপনি যদি পিঁপড়ের সাথে আপনার তৈরির জারে কোনও জার বা জারের ফোল্ডার প্যাকেজ করতে চান, তবে এই শ্রেণিপথ বা তৃতীয় পক্ষের প্লাগইন স্টাফগুলি ভুলে যান, আপনার যা যা করা উচিত তা হ'ল (পিঁপড়ে থাকা):
<jar destfile="your.jar" basedir="java/dir">
...
<zipgroupfileset dir="dir/of/jars" />
</jar>
আপনি যদি পিঁপড়া দিয়ে তৈরি করছেন (আমি গ্রহণ থেকে পিঁপড়া ব্যবহার করছি), আপনি পিঁপড়া যুক্ত করে কেবল অতিরিক্ত জার ফাইল যুক্ত করতে পারেন ... আপনার একাধিক লোকের দ্বারা পরিচালিত কোনও প্রকল্প থাকলে অবশ্যই এটি সর্বোত্তম পদ্ধতি নয় তবে এটি কাজ করে এক ব্যক্তি প্রকল্পের জন্য এবং সহজ।
উদাহরণস্বরূপ, আমার টার্গেট যা .jar ফাইলটি তৈরি করছিল:
<jar destfile="${plugin.jar}" basedir="${plugin.build.dir}">
<manifest>
<attribute name="Author" value="ntg"/>
................................
<attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
</manifest>
</jar>
আমি এটি তৈরি করতে কেবল একটি লাইন যুক্ত করেছি:
<jar ....">
<zipgroupfileset dir="${external-lib-dir}" includes="*.jar"/>
<manifest>
................................
</manifest>
</jar>
কোথায়
<property name="external-lib-dir"
value="C:\...\eclipseWorkspace\Filter\external\...\lib" />
বাহ্যিক জারগুলির সাথে দির ছিল। এবং এটাই...
আমি আমার জাভা বিল্ডগুলির জন্য মাভেন ব্যবহার করি যার ম্যাগেন এসেম্বলি প্লাগইন নামে একটি প্লাগইন রয়েছে ।
এটি আপনার জিজ্ঞাসা অনুযায়ী যা করে, কিন্তু অন্যান্য পরামর্শগুলির মতো কিছু বর্ণনা করে - মূলত সমস্ত নির্ভরশীল জারগুলি বিস্ফোরিত করে এবং একটি একক জারে পুনরায় সংযুক্ত করে
আপনার যদি ইলপিস আইডিই থাকে, আপনার কেবল আপনার জেআর রফতানি করতে হবে এবং "জেনারেটেড জেআর মধ্যে প্যাকেজ প্রয়োজনীয় লাইব্রেরি" চয়ন করতে হবে। গ্রহণটি স্বয়ংক্রিয়ভাবে জেনারেটেড জেআর-তে প্রয়োজনীয় নির্ভরশীল জেআর যুক্ত করবে এবং সেই সাথে কিছু গ্রহন গ্রাহক কাস্টম শ্রেণি লোডার তৈরি করবে যা এই জারগুলি স্বয়ংক্রিয়ভাবে লোড করে।
উইনস্টোন বেশ ভাল http://blog.jayway.com/2008/11/28/executable-war-with-winstone-maven-plugin/ । তবে জটিল সাইটের জন্য নয়। এবং এটি একটি লজ্জা কারণ এটি যা লাগে তা হ'ল প্লাগইন অন্তর্ভুক্ত করা।
ঠিক আছে, আপনি যদি গ্রহনটি ব্যবহার করছেন তবে খুব সহজ উপায় আছে।
আপনার প্রকল্পটিকে "চলমানযোগ্য" জার ফাইল হিসাবে রফতানি করুন (Eclipse এর মধ্যে থেকে ডান-ক্লিক প্রকল্প ফোল্ডারটি নির্বাচন করুন "রফতানি ..." নির্বাচন করুন)। আপনি যখন রফতানি সেটিংস কনফিগার করবেন তখন "উত্পন্ন জারে প্রয়োজনীয় লাইব্রেরিগুলি বের করুন" নির্বাচন করতে ভুলবেন না। মনে রাখবেন, "এক্সট্র্যাক্ট ..." নির্বাচন করুন এবং না "প্যাকেজ লাইব্রেরি প্রয়োজনীয় ..."।
অতিরিক্তভাবে : আপনার রফতানি সেটিংসে আপনাকে অবশ্যই রান-কনফিগারেশন নির্বাচন করতে হবে। সুতরাং, আপনি সর্বদা কিছু ক্লাসে একটি ফাঁকা প্রধান () তৈরি করতে এবং এটি আপনার রান কনফিগারেশনের জন্য ব্যবহার করতে পারেন।
যাইহোক, এটি সময়ের 100% কাজ করার গ্যারান্টিযুক্ত নয় - আপনি একটি পপ-আপ বার্তা দেখতে পাবেন যেটিতে আপনি যে জার ফাইলগুলি অন্তর্ভুক্ত করছেন সেগুলির লাইসেন্সগুলি এবং স্বাক্ষর ফাইলগুলি অনুলিপি না করার বিষয়ে যাচাই করে নেওয়ার বিষয়টি নিশ্চিত করতে আপনাকে বলছে। তবে আমি বছরের পর বছর ধরে এটি করে আসছি এবং কখনও কোনও সমস্যার মুখোমুখি হইনি।
একটি উবার-ডিরে প্রবেশ করা আমার পক্ষে কাজ করে যেমন আমাদের সকলকে মূল: ava জাভা ব্যবহার করা উচিত এবং সংস্করণ সহ প্যাকেজগুলিতে আউটলেট কোড থাকতে হবে। অর্থাৎ ca.tecreations-1.0.0। সাইন ইন করা ঠিক আছে কারণ জারগুলি তাদের ডাউনলোড করা অবস্থান থেকে অক্ষত। তৃতীয় পক্ষের স্বাক্ষর অক্ষত, সি থেকে সরান: ava জাভা। আমার প্রকল্প ডীর আছে। লঞ্চার থেকে চালাও তাই জাভা -cp সি: ava জাভা লঞ্চার