একটি জেআরের মধ্যে জেআর সহ ক্লাসপাথ


134

classpathঅন্য জাআর ফাইলের মধ্যে থাকা একটি জেআর ফাইল অন্তর্ভুক্ত এমন একটি জাভা নির্দিষ্ট করা কি সম্ভব ?

উত্তর:


94

যদি আপনি এমন একটি জার তৈরি করার চেষ্টা করছেন যা আপনার অ্যাপ্লিকেশন এবং এটির প্রয়োজনীয় গ্রন্থাগারগুলি ধারণ করে, তবে এটি করার জন্য দুটি উপায় (যা আমি জানি)। প্রথমটি হ'ল ওয়ান-জার , যা ঘড়ের বাসা বাঁধার অনুমতি দেওয়ার জন্য একটি বিশেষ শ্রেণীবদ্ধকারী ব্যবহার করে। দ্বিতীয়টি হলেন উবারজার , (বা ছায়া ), যা অন্তর্ভুক্ত লাইব্রেরিগুলি বিস্ফোরিত করে এবং সমস্ত শ্রেণিকে শীর্ষ স্তরের জারে রাখে।

আমার আরও উল্লেখ করা উচিত যে উবারজার এবং শেড যথাক্রমে মাভেন 1 এবং মাভেন 2 এর প্লাগইন। নীচে উল্লিখিত হিসাবে, আপনি অ্যাসেম্বলি প্লাগইনও ব্যবহার করতে পারেন (যা বাস্তবে আরও শক্তিশালী তবে সঠিকভাবে কনফিগার করা অনেক কঠিন)।


81
সুতরাং আমরা এখানে 5 বছর পরে। দেখে মনে হচ্ছে এটি এখনও সত্য। খুব দু: খিত :(
T3rm1

3
আমি এখনকার দিনের সবচেয়ে ভাল উপায়টি হ'ল ইন্টেলিজ জারের শৈল্পিক ব্যবহার। এটি নির্ভরশীল জারগুলি থেকে সমস্ত ক্লাস বের করে এবং এগুলিকে আপনার এক জারে রাখে।
enl8enmentnow

2
কিছু পরিস্থিতিতে যেমন সম্ভব হয় না যখন আপনি বাউন্সি ক্যাসলের মতো জেসিই বাস্তবায়ন ব্যবহার করছেন যাতে স্বাক্ষর করা দরকার
ডাবুটি

1
@ ব্রেনস্লাগস ৩৩ ... আপনি কী করার চেষ্টা করছেন? আমি মনে করি ওয়ান-জারের ক্লাসলোডার এবং প্যাকেজার এখনও জারের মধ্যে একটি জার (জাভা এসই জন্য) প্রকল্পের অন্তর্ভুক্ত করার উত্তর the উবারজার ব্যবহার করে আপনার জারে ক্লাস ফাইলগুলি বের করে সমস্যাটি দূর করে।
স্টিভ ময়ের

1
উবারজার লিঙ্কটির জন্য লগইন শংসাপত্র প্রয়োজন। কোন উত্তরসূরি ওয়েবপৃষ্ঠা আছে?
টমাস ওয়েলার

50

আপনি "বিস্ফোরণে জেআর বিষয়বস্তু" সমাধানগুলি ব্যবহার করতে চান না। তারা অবশ্যই স্টাফগুলি দেখতে শক্ত করে তোলে (যেহেতু সবকিছু একই স্তরে বিস্ফোরিত হয়)। তদতিরিক্ত, নামকরণের দ্বন্দ্ব থাকতে পারে (লোকেরা যথাযথ প্যাকেজ ব্যবহার করলে তা হওয়া উচিত নয়, তবে আপনি সর্বদা এটি নিয়ন্ত্রণ করতে পারবেন না)।

আপনি যে বৈশিষ্ট্যটি চান তা হ'ল শীর্ষ 25 সান আরএফইগুলির মধ্যে একটি : আরএফই 4648386 , যা সূর্য তাদের অসীম জ্ঞানের ভিত্তিতে নিম্ন অগ্রাধিকার হিসাবে চিহ্নিত করেছে। আমরা কেবল আশা করতে পারি যে সূর্য জাগবে ...

ইতিমধ্যে, আমি যে সর্বোত্তম সমাধানটি এসেছি (যা আমি আশা করি যে সান জেডিকে অনুলিপি করবে) হ'ল কাস্টম শ্রেণীর লোডার জারক্লাসলোডার ব্যবহার করা


4
নামকরণের বিরোধগুলি লগ 4 জে কনফিগারেশন এবং লাইসেন্স পাঠ্যের মতো স্টাফের সাথে সংঘটিত হওয়ার প্রায় গ্যারান্টিযুক্ত।
মাইকেল বর্গওয়ার্ট

1
দুঃখজনকভাবে জারক্লাসলুডার জিপিএলভি 3 / বাণিজ্যিক তাই এটি সম্ভবত "সূর্যের দ্বারা অনুলিপি করা হবে না (এখন ওরাকল)" হবে না, এবং বাণিজ্যিকভাবে ব্যবহার করা যাবে না যদি না আপনার কিছু কেনার জন্য অভ্যন্তরীণ রাজনৈতিক দাগ এবং সময় না থাকে। তবে আমি সম্মত হই যে বর্তমান ডিরেক্টরিতে থাকা বার্ফগুলি খারাপ জিনিস।
Gus

এই উত্তরের ধারণার জন্য +1 (যদিও আমি উত্তরটি নিজেই +1 করব না): আপনি কোনও স্বাক্ষরিত জেআর ফাইল পুনরায় প্যাকেজ করতে পারবেন না, তাই এই কৌশলটি অনেক পরিস্থিতিতে ব্যবহার করা যাবে না (যেমন জাভা activation.jar)।
ক্রিস্টোফার শুল্টজ

31

কিছু গবেষণার পরে আমি এমন একটি পদ্ধতি খুঁজে পেয়েছি যার জন্য ম্যাভেন বা কোনও তৃতীয় পক্ষের এক্সটেনশন / প্রোগ্রামের প্রয়োজন হয় না।

আপনি আপনার ম্যানিফেস্ট ফাইলটিতে "ক্লাস-পাথ" ব্যবহার করতে পারেন।

উদাহরণ স্বরূপ:

ম্যানিফেস্ট ফাইল 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

ক্লাস-পাথ সম্পর্কে আপনার অন্য সমস্ত তথ্য আপনি এখানে দেখতে পান


19
এই উত্তর কাজ করে না । ওরাকল ডক থেকে (উপরের কলা দ্বারা সংযুক্ত): "ক্লাস-পাথ
শিরোনামটি

এটি কোনও অ্যান্ড্রয়েড সেটিংয়েও ব্যবহার করা যেতে পারে কিনা সে সম্পর্কে কিছু জানা।
মোস্তোভস্কি

2
এটি এক্সিকিউটেবল জার দৃশ্যের জন্য কাজ করে (পরীক্ষিত) তবে আপনি যখন লাইব্রেরির জারে কোনও জার অন্তর্ভুক্ত করতে চান তখন এটি কাজ করতে পারে না।
সাইচিহ

5
ওহ না এটি কাজ করে না, একবার আমি সরে গেলে custom_lib.jar, জারটি আর কার্যকর করা যায় না :(
সাইচিহ

ক্লাস-পাথে একাধিক জারগুলি কীভাবে নির্দিষ্ট করা যায়?
অভিষেক তিওয়ারি

22

ব্যবহার করুন zipgroupfileset ট্যাগ (ক হিসাবে একই বৈশিষ্ট্য ব্যবহার fileset ট্যাগ); এটি ডিরেক্টরিতে সমস্ত ফাইল আনজিপ করে আপনার নতুন সংরক্ষণাগার ফাইলে যুক্ত করবে। আরও তথ্য: http://ant.apache.org/manual/Tasks/zip.html

জার-ইন-এ-জার সমস্যাটি ঘুরে দেখার এটি খুব দরকারী উপায় - আমি জানি কারণ আমি কী করতে হবে তা জানার চেষ্টা করার সময় এই সঠিক স্ট্যাকওভারফ্লো প্রশ্নটি গুগল করেছি। আপনি যদি পিঁপড়ের সাথে আপনার তৈরির জারে কোনও জার বা জারের ফোল্ডার প্যাকেজ করতে চান, তবে এই শ্রেণিপথ বা তৃতীয় পক্ষের প্লাগইন স্টাফগুলি ভুলে যান, আপনার যা যা করা উচিত তা হ'ল (পিঁপড়ে থাকা):

<jar destfile="your.jar" basedir="java/dir">
  ...
  <zipgroupfileset dir="dir/of/jars" />
</jar>

8

আপনি যদি পিঁপড়া দিয়ে তৈরি করছেন (আমি গ্রহণ থেকে পিঁপড়া ব্যবহার করছি), আপনি পিঁপড়া যুক্ত করে কেবল অতিরিক্ত জার ফাইল যুক্ত করতে পারেন ... আপনার একাধিক লোকের দ্বারা পরিচালিত কোনও প্রকল্প থাকলে অবশ্যই এটি সর্বোত্তম পদ্ধতি নয় তবে এটি কাজ করে এক ব্যক্তি প্রকল্পের জন্য এবং সহজ।

উদাহরণস্বরূপ, আমার টার্গেট যা .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" />

বাহ্যিক জারগুলির সাথে দির ছিল। এবং এটাই...


6

নিজের ক্লাস লোডার না লিখেই নয়। আপনি জারের ক্লাসপথে জারগুলি যুক্ত করতে পারেন, তবে সেগুলি অবশ্যই সহ-অবস্থান করা উচিত, মূল জারে অন্তর্ভুক্ত নয়।


2

এটি করতে একটি তৃতীয় পক্ষের লাইব্রেরি বা এটি সমর্থন করার জন্য আপনাকে একটি কাস্টম শ্রেণি-লোডার তৈরি করতে হবে। আপনার সেরা বাজি রানটাইম থেকে জারটি বের করা এবং সেগুলি ক্লাসপাথে যুক্ত করা (বা সেগুলি ইতিমধ্যে ক্লাসপাথে যুক্ত করা হয়েছে)।


2

আমি আমার জাভা বিল্ডগুলির জন্য মাভেন ব্যবহার করি যার ম্যাগেন এসেম্বলি প্লাগইন নামে একটি প্লাগইন রয়েছে

এটি আপনার জিজ্ঞাসা অনুযায়ী যা করে, কিন্তু অন্যান্য পরামর্শগুলির মতো কিছু বর্ণনা করে - মূলত সমস্ত নির্ভরশীল জারগুলি বিস্ফোরিত করে এবং একটি একক জারে পুনরায় সংযুক্ত করে


মাভেন অ্যাসেমব্লী প্লাগইনটি ব্যবহার করা বেশ বেদনাদায়ক ... উবারজার এবং শেড হলেন মাভেন 1 এবং মাভেন 2 প্লাগইন (একটি সত্যটি আমার উপরে উল্লেখ করা উচিত ছিল এবং এখনই এটি করব)
স্টিভ ময়ার

2

আপনার যদি ইলপিস আইডিই থাকে, আপনার কেবল আপনার জেআর রফতানি করতে হবে এবং "জেনারেটেড জেআর মধ্যে প্যাকেজ প্রয়োজনীয় লাইব্রেরি" চয়ন করতে হবে। গ্রহণটি স্বয়ংক্রিয়ভাবে জেনারেটেড জেআর-তে প্রয়োজনীয় নির্ভরশীল জেআর যুক্ত করবে এবং সেই সাথে কিছু গ্রহন গ্রাহক কাস্টম শ্রেণি লোডার তৈরি করবে যা এই জারগুলি স্বয়ংক্রিয়ভাবে লোড করে।


1

আমি একই স্তরে সমস্ত ফাইলগুলি বের করার পরামর্শ দিতে যাচ্ছিলাম, তারপরে ফলাফলটি থেকে জার তৈরি করবো, যেহেতু প্যাকেজ সিস্টেমটি তাদের পরিষ্কারভাবে পৃথক করা উচিত keep এটি হ'ল ম্যানুয়াল উপায়, আমি মনে করি স্টিভ দ্বারা নির্দেশিত সরঞ্জামগুলি দুর্দান্তভাবে এটি করবে।



1

ঠিক আছে, আপনি যদি গ্রহনটি ব্যবহার করছেন তবে খুব সহজ উপায় আছে।

আপনার প্রকল্পটিকে "চলমানযোগ্য" জার ফাইল হিসাবে রফতানি করুন (Eclipse এর মধ্যে থেকে ডান-ক্লিক প্রকল্প ফোল্ডারটি নির্বাচন করুন "রফতানি ..." নির্বাচন করুন)। আপনি যখন রফতানি সেটিংস কনফিগার করবেন তখন "উত্পন্ন জারে প্রয়োজনীয় লাইব্রেরিগুলি বের করুন" নির্বাচন করতে ভুলবেন না। মনে রাখবেন, "এক্সট্র্যাক্ট ..." নির্বাচন করুন এবং না "প্যাকেজ লাইব্রেরি প্রয়োজনীয় ..."।

অতিরিক্তভাবে : আপনার রফতানি সেটিংসে আপনাকে অবশ্যই রান-কনফিগারেশন নির্বাচন করতে হবে। সুতরাং, আপনি সর্বদা কিছু ক্লাসে একটি ফাঁকা প্রধান () তৈরি করতে এবং এটি আপনার রান কনফিগারেশনের জন্য ব্যবহার করতে পারেন।

যাইহোক, এটি সময়ের 100% কাজ করার গ্যারান্টিযুক্ত নয় - আপনি একটি পপ-আপ বার্তা দেখতে পাবেন যেটিতে আপনি যে জার ফাইলগুলি অন্তর্ভুক্ত করছেন সেগুলির লাইসেন্সগুলি এবং স্বাক্ষর ফাইলগুলি অনুলিপি না করার বিষয়ে যাচাই করে নেওয়ার বিষয়টি নিশ্চিত করতে আপনাকে বলছে। তবে আমি বছরের পর বছর ধরে এটি করে আসছি এবং কখনও কোনও সমস্যার মুখোমুখি হইনি।


0

একটি উবার-ডিরে প্রবেশ করা আমার পক্ষে কাজ করে যেমন আমাদের সকলকে মূল: ava জাভা ব্যবহার করা উচিত এবং সংস্করণ সহ প্যাকেজগুলিতে আউটলেট কোড থাকতে হবে। অর্থাৎ ca.tecreations-1.0.0। সাইন ইন করা ঠিক আছে কারণ জারগুলি তাদের ডাউনলোড করা অবস্থান থেকে অক্ষত। তৃতীয় পক্ষের স্বাক্ষর অক্ষত, সি থেকে সরান: ava জাভা। আমার প্রকল্প ডীর আছে। লঞ্চার থেকে চালাও তাই জাভা -cp সি: ava জাভা লঞ্চার


সিটিতে জারস: ava জাভা \ জার্স। উত্স, বাইনারি এবং সংস্থানসমূহ সি: ava জাভা। ব্যাকআপ, বৈশিষ্ট্য, কীস্টোর_প্রাইভেট বাদ দিন। আনপ্যাক সি: ava জাভা এবং ক্লাসপাথ তৈরির সরঞ্জাম দিয়ে চালাও, তাই সম্ভবত ca.tecreations.s systemm.tools.SisstTool বা তুলনীয় জাভা শ্রেণি। তা কার্যকর করুন।
টিম ডি ভ্রিজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.