কমান্ড লাইন থেকে একটি JAR ফাইল চালান এবং শ্রেণিপথ নির্দিষ্ট করুন


115

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

আমি চেষ্টা করেছিলাম:

]$ java -jar -cp .:lib/* MyJar.jar
]$ java -cp .:lib/* -jar MyJar.jar
]$ java -cp .:lib/* com.somepackage.subpackage.Main

ইত্যাদি ...

প্রত্যেকটি এই বলে ত্রুটি দেয়:

Error: Could not find or load main class ....

বা NoClassDefFoundErrorনির্দেশিত গ্রন্থাগারগুলি পাওয়া যাচ্ছে না gives

এমনকি আমি জেআর ফাইলটি পুনরায় তৈরি করার চেষ্টা করেছি এবং libডিরেক্টরি এবং সামগ্রীগুলি অন্তর্ভুক্ত করেছি , তবে এখনও কোনও পাশা নেই ...

আমি কীভাবে কমান্ড লাইন থেকে একটি জেআর ফাইল কার্যকর করতে পারি এবং ক্লাসপথটি ব্যবহার করতে পারি তা নির্দিষ্ট করতে পারি?


উত্তর:


204

আপনি নির্দিষ্ট করার -jarপরে -cpপ্যারামিটার উপেক্ষা করা হবে।

ডকুমেন্টেশন থেকে :

আপনি যখন এই বিকল্পটি ব্যবহার করেন, JAR ফাইলটি সমস্ত ব্যবহারকারীর শ্রেণীর উত্স এবং অন্যান্য ব্যবহারকারী শ্রেণীর পাথ সেটিংস উপেক্ষা করা হয়।

আপনি প্রয়োজনীয় জার ফাইলগুলি অন্য জার ফাইলে "অন্তর্ভুক্ত" করতে পারবেন না (আপনাকে তাদের সামগ্রীগুলি বের করতে হবে এবং ক্লার্স ফাইলগুলি আপনার জার ফাইলে রাখতে হবে)

আপনার দুটি বিকল্প রয়েছে:

  1. libডিরেক্টরি থেকে সমস্ত জার ফাইলগুলি ম্যানিফেস্টে অন্তর্ভুক্ত করুন (আপনি সেখানে আপেক্ষিক পাথ ব্যবহার করতে পারেন)
  2. কমান্ডলাইনে ব্যবহার করে সবকিছু ( আপনার জার সহ ) উল্লেখ করুন -cp:
    java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main

22
; পরিবর্তে: আপনি যদি জাভা -cp মাইজার.জার হিসাবে উইন্ডোজ ব্যবহার করেন; lib / * com.somepackage.subpackage.Main
ত্রুটি

আপনি প্রয়োজনীয় জার ফাইলগুলি অন্য জার ফাইলে "অন্তর্ভুক্ত" করতে পারবেন না। অবশ্যই আপনি পারেন। যদি এটি অভ্যন্তরীণ ব্যবহারের জন্য হয় (যেমন, আপনি ব্যবহারকারীর কিছু প্রযুক্তিগত দক্ষতা ইত্যাদি রয়েছে বলে আশা করেন) তবে আপনি জারটি চালানোর চেষ্টা করার আগে, পদক্ষেপটি 1 টি জিজ্ঞাসা করতে পারেন, চালানো উচিত unzip MyJar.jar lib/*.jar। তারপরে, আপনার পরামর্শ অনুসারে, তারা চালাতে পারেjava -cp MyJar.jar:lib/* ...
রজার 21

3
বামারটি হ'ল বাহ্যিক সার্ভার-নির্দিষ্ট বৈশিষ্ট্যগুলির ফাইলের জন্য একটি "সমস্ত অন্তর্ভুক্ত" উবার জার চালানোর জন্য এটি সাধারণ ব্যবহারের কেস। স্পষ্টতই কোনও ব্লকার নয়, তবে কম-ভার্বোজ কমান্ড যদি আপনি -jজার ব্যবহার করতে পারেন এবং প্রধানটি নির্দিষ্ট করতে না পারেন
অ্যান্ড্রু নরম্যান

আমাকে কিছুক্ষণ সময় বের করতে লাগল। এবং লগ 4 জ ফাইলটি স্পষ্টভাবে লোড করতে প্রায় 6 টি লাইন লাগে। আর একটি জাভা বাগ যা কখনই স্থির হবে না।
টুনটেবল

1
নোট করুন যে ম্যানিফেস্ট ক্লাস-পাথ কেবল জার ফাইল লোড করার জন্য ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ এটি log4j3.xML দেখার জন্য ব্যবহার করা যাবে না। সপ্তাহের দিন.
টুনটেবল

34

একটি জার ফাইল চালান এবং এই জাতীয় শ্রেণীর পথ নির্দিষ্ট করুন:

java -cp <jar_name.jar:libs/*> com.test.App

jar_name.jar আপনি কার্যকর করতে চান সেই JAR এর পুরো নাম

libs/* আপনার নির্ভরতা জেআরগুলির একটি পথ

com.test.Appmain(String[])পদ্ধতিটি রয়েছে এমন জেআর থেকে শ্রেণীর সম্পূর্ণরূপে যোগ্য নাম

জার এবং নির্ভরশীল জারটির কার্যকর করার অনুমতি থাকা উচিত।


10

আপনি এটি ইউনিক্স শেল এ করতে পারেন:

java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main

আপনি উইন্ডোজ পাওয়ারশেলে এটি করতে পারেন:

java -cp "MyJar.jar;lib\*" com.somepackage.subpackage.Main

4

বিকল্পভাবে, ক্লাস-পাথ এবং মেইন-ক্লাসটি নির্দিষ্ট করতে ম্যানিফেস্টটি ব্যবহার করুন যদি আপনি চান, তবে আপনাকে -cpপ্রধান বর্গটি ব্যবহার বা নির্দিষ্ট করার দরকার নেই । আপনার ক্ষেত্রে এটিতে এর মতো লাইন থাকবে:

Main-Class: com.test.App
Class-Path: lib/one.jar lib/two.jar

দুর্ভাগ্যক্রমে আপনাকে ম্যানিফেস্টে প্রতিটি জারটি বানান করতে হবে (আপনি কেবল একবারে করার মতো কোনও বিগী নয়, এবং আপনি ফাইলটি তৈরি করতে স্ক্রিপ্ট ব্যবহার করতে পারেন বা এএনটি বা মাভেন বা গ্রেডলের মতো বিল্ড সরঞ্জাম ব্যবহার করতে পারেন)। এবং রেফারেন্সটি যেখানে আপনি চালাচ্ছেন তার একটি আপেক্ষিক বা পরম ডিরেক্টরি হতে হবে java -jar MyJar.jar

তারপরে এটি কার্যকর করুন

java -jar MyJar.jar

আমি মনে করি ক্লাস-পাথের বাইরের জারের মধ্যে থাকা ফাইলগুলি উল্লেখ করা দরকার। আমি মাইজার.জারের বাইরে কনফিগার করা ফাইলগুলি উল্লেখ করার জন্য এটি সাধারণভাবে কাজ করতে পারি না।
টুনটেবল

0

আরগস সহ ক্লাসপাথ সহ জারটিকে পুনরায় চালু করতে আপনি একটি রানটাইম.জেটআরটাইম.এক্সেক (কমান্ড) করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.