জাভা বিকল্পটি একটি প্রদত্ত ডিরেক্টরিতে পুনরাবৃত্তভাবে সমস্ত জাভা ফাইলগুলি সংকলন করতে বিকল্প option


127

আমি আমার প্রকল্পে জাভা ফাইলগুলি সংকলন করতে জাভাক সংকলকটি ব্যবহার করছি। ফাইল ভালো কয়েকটি প্যাকেজ উপর বিতরণ করা হয়: com.vistas.util, com.vistas.converter, com.vistas.LineHelper, com.current.mdcontect

এই প্যাকেজগুলির প্রত্যেকটিতে বেশ কয়েকটি জাভা ফাইল রয়েছে। আমি জাভ্যাকটি এভাবে ব্যবহার করছি:

javac com/vistas/util/*.java com/vistas/converter/*.java
      com.vistas.LineHelper/*.java com/current/mdcontect/*.java

(এক লাইনে)

এতগুলি পাথ দেওয়ার পরিবর্তে, আমি কীভাবে সংযোজককে পিতা বা মাতা ডিরেক্টরি থেকে সমস্ত জাভা ফাইলগুলি পুনরাবৃত্তভাবে সংকলন করতে বলতে পারি?


2
পিঁপড়া বা ম্যাভেনের মতো সরঞ্জামগুলিতে আপনার সত্যই নজর দেওয়া উচিত।
লরেন্ট পাইরেইন

এই এসও পোস্টটি কার্যকর হতে পারে স্ট্যাকওভারফ্লো.com
গোপি

উত্তর:


220

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

জাভ্যাক ব্যবহার করা হচ্ছে

যদি আপনার কোনও বৃহত প্রকল্পের জন্য কিছু চেষ্টা করার প্রয়োজন হয় এবং আপনার কাছে নিকটস্থ কোনও যথাযথ বিল্ড সরঞ্জাম না রয়েছে, আপনি সর্বদা একটি ছোট কৌশল ব্যবহার করতে পারেন যা javacঅফার করে: সংকলনের জন্য ক্লাসের নামগুলি কোনও ফাইলে নির্দিষ্ট করা যায়। আপনাকে কেবল উপসর্গের javacসাথে ফাইলটির নামটি দিতে হবে @

আপনি যদি *.javaআপনার প্রকল্পের সমস্ত ফাইলের একটি তালিকা তৈরি করতে পারেন তবে এটি সহজ:

# Linux / MacOS
$ find -name "*.java" > sources.txt
$ javac @sources.txt

:: Windows
> dir /s /B *.java > sources.txt
> javac @sources.txt
  • সুবিধাটি হ'ল এটি একটি দ্রুত এবং সহজ সমাধান।
  • অপূর্ণতাটি হ'ল sources.txtপ্রতিবার নতুন উত্স তৈরি করার সময় আপনাকে ফাইলটি পুনরায় জেনারেট করতে হবে বা বিদ্যমান ফাইলটি পুনরায় নামকরণ করতে হবে যা ভুলে যাওয়া সহজ (ত্রুটি-প্রবণ) এবং ক্লান্তিকর কাজ।

একটি বিল্ড টুল ব্যবহার করে

দীর্ঘমেয়াদে এমন একটি সরঞ্জাম ব্যবহার করা ভাল যা সফ্টওয়্যার তৈরির জন্য ডিজাইন করা হয়েছিল।

পিঁপড়া ব্যবহার

আপনি যদি একটি সাধারণ build.xmlফাইল তৈরি করেন যা সফ্টওয়্যারটি কীভাবে তৈরি করবেন তা বর্ণনা করে:

<project default="compile">
    <target name="compile">
        <mkdir dir="bin"/>
        <javac srcdir="src" destdir="bin"/>
    </target>
</project>

নিম্নলিখিত কমান্ডটি চালিয়ে আপনি সম্পূর্ণ সফ্টওয়্যারটি সংকলন করতে পারেন:

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

মাভেন ব্যবহার করা হচ্ছে

ম্যাভেন সেটআপ এবং কাজ করার জন্য তুচ্ছ নয়, তবে এটি শেখা ভাল মূল্য দেয়। 5 মিনিটের মধ্যে একটি প্রকল্প শুরু করার জন্য এখানে দুর্দান্ত টিউটোরিয়াল ।

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

একটি আইডিই ব্যবহার করে

এখন যা আপনার বিকাশের উত্পাদনশীলতা বাড়িয়ে তুলতে পারে। কয়েকটি ওপেন সোর্স বিকল্প রয়েছে (যেমন এক্লিপস এবং নেটবিয়ানস , আমি পূর্বেরটিকে পছন্দ করি) এবং এমনকি বাণিজ্যিকগুলি ( ইন্টেলিজির মতো ) যা বেশ জনপ্রিয় এবং শক্তিশালী।

তারা ব্যাকগ্রাউন্ডে প্রকল্পের বিল্ডিং পরিচালনা করতে পারে যাতে আপনাকে সমস্ত কমান্ড লাইন স্টাফের সাথে ডিল করতে হবে না। যাইহোক, ব্যাকগ্রাউন্ডে আসলে কী ঘটে তা আপনি যদি জেনে থাকেন তবে এটি সর্বদা কার্যকর হয় যাতে আপনি একটি এর মতো মাঝে মাঝে ত্রুটিগুলি খুঁজে বের করতে পারেন ClassNotFoundException

একটি অতিরিক্ত নোট

বড় প্রকল্পগুলির জন্য, এটি সর্বদা আইডিই এবং একটি বিল্ড সরঞ্জাম ব্যবহার করার পরামর্শ দেওয়া হয় । প্রাক্তনটি আপনার উত্পাদনশীলতা বাড়িয়ে তোলে, তবে আধুনিককৃতরা প্রকল্পের সাথে বিভিন্ন আইডিই ব্যবহার করা সম্ভব করে তোলে (উদাহরণস্বরূপ, মাভেন একটি সহজ mvn eclipse:eclipseকমান্ডের সাথে এক্লিপস প্রকল্প বর্ণনাকারী তৈরি করতে পারে )। তদুপরি, একটি প্রকল্প যা একটি সিঙ্গেল লাইন কমান্ড দিয়ে পরীক্ষা / বিল্ট করা যায় তা নতুন সহকর্মীদের সাথে পরিচিত এবং উদাহরণস্বরূপ একটি অবিচ্ছিন্ন ইন্টিগ্রেশন সার্ভারে পরিচিত করা সহজ। খুবই সহজ :-)


4
ব্যবহার করার সময় javac, আউটপুট ডিরেক্টরি নির্দিষ্ট করা ভাল। find -name "*.java" > sources.txt && javac -d bin @sources.txt। অন্যথায় * .class ফাইলগুলি যেখানে সূত্র রয়েছে সেই ডিরেক্টরিতে সংরক্ষণ করা হবে।
মাকসিম দিমিত্রিভ

1
একেবারে সত্য. যদিও আমার মতে, যদি কেউ সবেমাত্র তার সাথে খেলা শুরু করে থাকেন javacতবে CLASSPATHকীভাবে কোড চালাবেন java, প্যাকেজগুলি কীভাবে মোকাবেলা করতে হবে, যা চালানোর জন্য মূল ফোল্ডার হওয়া উচিত ইত্যাদি ধারণাটি সাধারণত পরিষ্কার নয়। এইভাবে আমি আউটপুট dir বাদ। যাইহোক, পরামর্শের জন্য ধন্যবাদ!
রাগলেণ্ডি

6
এটি জুড়ে আসা ম্যাক ব্যবহারকারীদের জন্য findকমান্ডটি হ'ল: find . -name "*.java" > sources.txt(দ্রষ্টব্য .)
মিঃডুক

@ এমডডুক কী যোগ করে " না? এটি কি বর্তমান ডিরেক্টরিতে অনুসন্ধান করার জন্য?
ব্র্যাডি শিহান

@ ব্র্যাডিশিহান এটি প্রদত্ত পথ থেকে অনুসন্ধান শুরু করবে। "।" মানে বর্তমান অভিধান থেকে শুরু নোট আপনি যে আছে খুঁজে একটি পথ (OS X এর মধ্যে) উল্লেখ করতে
ক্রিস

39
find . -name "*.java" -print | xargs javac 

কিন্ডা নৃশংস, কিন্তু জাহান্নামের মতো কাজ করে। (কেবলমাত্র ছোট প্রোগ্রামগুলিতে ব্যবহার করুন, এটি একেবারেই দক্ষ নয়)


1
যদি আপনি এটি ব্যবহার করে বিবেচনা করেন find ... -print0এবং xargs -0 ...পরিবর্তে ফাইলের
নামগুলিতে

29

যদি আপনার শেল এটি সমর্থন করে তবে কি এমন কোনও কাজ হবে?

javac com/**/*.java 

যদি আপনার শেলটি সমর্থন না করে **তবে সম্ভবত

javac com/*/*/*.java

কাজ করে (3 টি প্যাকেজযুক্ত সমস্ত প্যাকেজের জন্য - আরও কম কিছুর জন্য মানিয়ে নেওয়া)।


আমি এটি উইন্ডোজ 10-এ কমান্ড প্রম্পটে ব্যবহার করার চেষ্টা করেছি 10 কেউ উইন্ডোজ 10 এ কাজ করে কিনা তা নিশ্চিত করতে পারে বা আমি এটি ভুল করে দিচ্ছি দয়া করে
ড্যান

26

সাধারণ ক্ষেত্রে যেখানে আপনি আপনার পুরো প্রকল্পটি সংকলন করতে চান আপনি কেবল আপনার মূল শ্রেণীর সাথে জাভ্যাক সরবরাহ করতে পারেন এবং এটি সমস্ত প্রয়োজনীয় নির্ভরতা সংকলন করতে দিন:

javac -sourcepath . path/to/Main.java


খুব সহজ পদ্ধতি, অতিরিক্ত ফাইলগুলির উপর নির্ভর করে না
215 এ লিকুইজ করুন

এঁদের কাছে পিঁপড়া শিখতে (যেমন আমার মতো) বেশি সময় নেই তাদের পক্ষে এটি সেরা এবং সহজতম
হামজা আব্বাদ

দুর্ভাগ্যক্রমে এটি অলস। আপনি যদি স্পর্শ না করেন Main.java, যা সম্ভবত আপনার দ্বিতীয় ফাইল তৈরির পরে আপনি না করেন, অন্য কিছুই সংকলক হয় না।
টম হাটিন -

এখানেও ভাল কাজ করে না। কিছু নির্ভরতা পরিবর্তিত হয়েও পুনরায় সংযুক্ত করা হয় না। @ টমহাউটিন-ট্যাকলাইন আমি প্রথমে স্পর্শ করার চেষ্টা করেছি তবে কিছুই নয়। সমস্ত উপর স্পর্শ প্রয়োজন। বিশ্রী যদিও।
মিমি

4

javac -cp "jar_path/*" $(find . -name '*.java')

(আমি xargs ব্যবহার না করা পছন্দ করি কারণ এটি তাদের বিভাজন করে এবং একাধিকবার জাভাক চালাতে পারে, প্রতিটি জাভা ফাইলের উপসেট সহ, যার মধ্যে কয়েকটি একই জাভাক কমান্ড লাইনে উল্লিখিত অন্যগুলি আমদানি করতে পারে)

আপনার যদি অ্যাপ.জভা এন্ট্রিপয়েন্ট থাকে তবে -সুরসেপথ দিয়ে ফ্রিকারের উপায়টি সবচেয়ে ভাল। এটি আমদানি-নির্ভরতা অনুসরণ করে, প্রয়োজনীয় প্রতিটি জাভা ফাইল সংকলন করে। উদাহরণ:

javac -cp "jar_path/*" -sourcepath src/ src/com/companyname/modulename/App.java

এছাড়াও আপনি একটি লক্ষ্য শ্রেণী-ফাইল Dir নির্দিষ্ট করতে পারেন: -d target/


3

আমি আপনাকে পিঁপড়া ব্যবহার শিখতে পরামর্শ দেব , যা এই কাজের জন্য খুব উপযুক্ত এবং এটি খুব সহজেই উপলব্ধি করা যায় এবং ভালভাবে নথিভুক্ত হয়।

আপনাকে কেবল বিল্ড.এক্সএমএল ফাইলটিতে এই জাতীয় লক্ষ্য নির্ধারণ করতে হবে:

<target name="compile">
    <javac srcdir="your/source/directory"
           destdir="your/output/directory"
           classpath="xyz.jar" />
</target>

2

আমি কেবল একটি সাধারণ মেকফিল দিয়ে মেক ব্যবহার করছি যা দেখতে দেখতে এটি দেখতে:

JAVAC = javac -Xlint:unchecked
sources = $(shell find . -type f -name '*.java')
classes = $(sources:.java=.class)

all : $(classes)

clean :
        rm -f $(classes)

%.class : %.java
        $(JAVAC) $<

এটি একবারে উত্সগুলি সংকলন করে এবং প্রয়োজনে কেবল পুনরায় সংযোগ করে।


1

জাভাক কমান্ডটি পুনরাবৃত্তির সংকলন প্রক্রিয়া অনুসরণ করে না, সুতরাং আপনি কমান্ড চলাকালীন প্রতিটি ডিরেক্টরি নির্দিষ্ট করেছেন বা ডিরেক্টরিতে একটি পাঠ্য ফাইল সরবরাহ করতে পারেন যা আপনি অন্তর্ভুক্ত করতে চান:

javac -classpath "${CLASSPATH}" @java_sources.txt

0

আমি এটি একটি এক্সকোড জেএনআই প্রকল্পে পুনরাবৃত্তভাবে আমার পরীক্ষার ক্লাসগুলি তৈরি করতে ব্যবহার করছি:

find ${PROJECT_DIR} -name "*.java" -print | xargs javac -g -classpath ${BUILT_PRODUCTS_DIR} -d ${BUILT_PRODUCTS_DIR}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.