কেন কেউ জাভার জন্য মেক ব্যবহার করছে না?


162

আমি দেখেছি প্রতিটি জাভা প্রকল্পের প্রায়শই হয় মাভেন বা পিপীলিকা ব্যবহার করে। এগুলি দুর্দান্ত সরঞ্জাম এবং আমি মনে করি যে কোনও প্রকল্প সেগুলি ব্যবহার করতে পারে। তবে কি কখনও তৈরি করতে হয়েছিল ? এটি বিভিন্ন জাভাবিহীন প্রকল্পের জন্য ব্যবহৃত হয় এবং সহজেই জাভা পরিচালনা করতে পারে। নিশ্চিত হয়ে নিন যে আপনি উইন্ডোজ ব্যবহার করলে Make.exe ডাউনলোড করতে হবে, কিন্তু পিপীলিকা এবং ম্যাভেনও জেডিকে নিয়ে আসে না।

জাভা ব্যবহারের সাথে মেক করার সাথে কি কিছু মৌলিক ত্রুটি রয়েছে? এটি কি কেবল এন্ট এবং ম্যাভেন জাভাতে লেখা বলে?


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

একদিকে যেমন গ্রেট জাভা স্পেসের নতুন খেলোয়াড়, তেমন গ্যান্ট (কিছুটা কম ডিগ্রি পর্যন্ত)। মাভেন বা পিঁপড়া একটি মিথ্যা দ্বিবিজ্ঞান।
মাইকেল ইস্টার

@ মিশেল ইস্টার, ভুয়া দ্বৈতত্ত্বটি হবে ম্যাভেন / পিঁপড়া বনাম। সত্যিকারের দ্বৈতত্ত্ব, যদি আমি আপনাকে সঠিকভাবে পড়ছি তবে তা গ্র্যাডল / মাভেন / গ্যান্ট / পিঁপড়া বনাম তৈরি করা হবে। কিন্তু এটা বলা কঠিন ধরনের :) এর
ড্যান Rosenstark

উত্তর:


192

মেক এবং জাভার মূল সমস্যাটি হ'ল মেক আপনি যে নির্ভরতা নির্দিষ্ট করেছেন সেই ভিত্তিতে কাজ করে এবং তারপরে সেই নির্ভরতা সমাধানের জন্য একটি নিয়ম।

বেসিক সি সহ, এটি সাধারণত "একটি মেইন.সি. ফাইলকে মেইন.ও ফাইলে রূপান্তর করতে," সিসি মেইন.সি. "চালান।

আপনি জাভাতে এটি করতে পারেন, তবে আপনি দ্রুত কিছু শিখতে পারেন।

বেশিরভাগই জাভাক সংকলকটি শুরু করতে ধীর হয়।

মধ্যে পার্থক্য:

javac Main.java
javac This.java
javac That.java
javac Other.java

এবং

javac Main.java This.java That.java Other.java

রাত ও দিন

শত শত ক্লাসের সাথে এটি আরও বাড়িয়ে দিন এবং এটি কেবল অযোগ্য হয়ে ওঠে।

তারপরে আপনি এটিকে একত্রিত করেন যে জাভা ডিরেক্টরিগুলির মধ্যে ফাইলগুলির গ্রুপ হিসাবে সংগঠিত হতে থাকে, বনাম সি এবং অন্যান্য যা একটি চাটুকার কাঠামোর দিকে ঝোঁক। ফাইলের শ্রেণিবিন্যাসের সাথে কাজ করার জন্য মেকের খুব বেশি সরাসরি সমর্থন নেই।

সংগ্রহ স্তরের কোন ফাইলগুলি পুরানো, তা নির্ধারণে মেকও খুব ভাল নয়।

পিঁপড়ের সাহায্যে এটি পুরানো এবং পুরানো ফাইলগুলির সমস্তগুলি সংযুক্ত করবে এবং তারপরে সেগুলি একবারে সংকলন করবে। মেক কেবল প্রতিটি পৃথক ফাইলে জাভা সংকলককে কল করবে। এটি না করার কারণে সত্যিকারের বাহ্যিক সরঞ্জামাদানটি বোঝাতে প্রয়োজন যে মেকিংটি টাস্কের পক্ষে যথেষ্ট নয়।

এ কারণেই অ্যান্ট এবং মাভেনের মতো বিকল্পগুলি উঠেছিল।


6
সুতরাং একটি বিশাল জাভা প্রকল্পে মেক ব্যবহারের জন্য, সমস্ত পরিবর্তিত। জাভা ফাইলের একটি তালিকা বজায় রাখা এবং তারপরে জাভ্যাকটি কল করা প্রয়োজন? এটি আমার কাছে আদর্শের চেয়ে কম মনে হচ্ছে। আমি এখনও অবধি দেখলাম এটি সেরা উত্তর।
ব্যবহারকারী 1

32
আমি এটা ভালোবাসি. জবাব আপনি খুব ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে যেতে পারেন।
সেমিসিগিন্টি

25
না। জাভাক যদি এটি ব্যবহার করার জন্য ডিজাইন করা হয় তবে এটি ব্যবহার করা ধীর নয় is আপনি যদি একবারে একটি ফাইল সংকলন করতে ব্যবহার করেন তবে এটি ধীরে ধীরে।
স্টিফেন সি

7
@ কেসি জাভ্যাক খুব ধীর নয়। জেভিএম শুরু করতে খুব ধীর।
থোরবজর্ন রাভন অ্যান্ডারসন

7
জিএনইউ মেকের কমপক্ষে $?স্বয়ংক্রিয় পরিবর্তনশীল রয়েছে যা "লক্ষ্যগুলির চেয়ে নতুন যে সমস্ত পূর্বশর্ত" পর্যন্ত প্রসারিত হয়। একাধিক টার্গেট সহ প্যাটার্ন বিধিগুলির বৈশিষ্ট্যও রয়েছে যা সমস্ত .classফাইল আপডেট করার জন্য একবারে রেসিপিটি চালায় । একত্রিত করুন যে ফাইল কিছু চালাক ব্যবহার সঙ্গে / পাঠ্য ফাংশন পছন্দ $(wildcard), $(shell), $(eval)এবং আপনার বিল্ড লক্ষ্যমাত্রা আপনার ডিরেক্টরির বিন্যাস জুড়ে ছড়িয়ে ছিটিয়ে আবিষ্কার আপনার Makefile শেখাতে পারেন।
তানজ 87

33

সম্মানজনক makeপ্রোগ্রামটি সি এবং সি ++ এর মতো আলাদাভাবে সংকলিত ভাষাগুলি হ্যান্ডল করে। আপনি একটি মডিউল সংকলন করেন, এটি #includeঅন্য অন্তর্ভুক্ত ফাইলগুলির পাঠ্যে টানতে ব্যবহার করে এবং একটি একক অবজেক্ট ফাইল আউটপুট হিসাবে লেখেন। সংকলকটি খুব সহজেই এক-সময়ে-সময়ে-সিস্টেম হয়, একটি পৃথক সংযোগকারী পদক্ষেপের সাথে অবজেক্ট ফাইলগুলিকে এক্সিকিউটেবল বাইনারিতে বাঁধতে হয়।

যাইহোক, জাভাতে, সংকলকটি আসলে আপনার দ্বারা আমদানি করা অন্যান্য ক্লাসগুলি সংকলন করতে হয় import। যদিও জাভা উত্স কোড থেকে সমস্ত প্রয়োজনীয় নির্ভরতা তৈরি করে এমন কিছু লেখা সম্ভব হয়েছিল, যাতে makeএকসাথে সঠিক ক্রমে শ্রেণি তৈরি হয়, এটি এখনও বিজ্ঞপ্তি নির্ভরতা যেমন মামলা পরিচালনা করে না।

ইতিমধ্যে সংকলিত ফলাফলগুলির উপর নির্ভর করে আরও ক্লাস সংকলন করার সময় অন্যান্য ক্লাসের সংকলিত ফলাফলগুলি ক্যাশে করার মাধ্যমে জাভা সংকলক আরও দক্ষ হতে পারে। এই ধরণের স্বয়ংক্রিয় নির্ভরতা মূল্যায়নের makeএকার মাধ্যমে সত্যই সম্ভব নয়।


7
এটি মেক বনাম পিঁপড়া / মাভেনের উত্তর চেয়ে মেক বনাম জাভ্যাক উত্তরের মতো বেশি বলে মনে হয়। আপনার উত্তরের উপর ভিত্তি করে, কেউ কেন কেবল মেক + জাভ্যাক (জাভাককে একটি সময়ে একটি সম্পূর্ণ প্যাকেজ বা "মডিউল" প্রদান করতে পারে না, তাই বৃত্তাকার নির্ভরতা মেক থেকে গোপন করা হয়)? পিঁপড়া বা মাভেন কি এই পদ্ধতির উপর কোনও উপকার সরবরাহ করবে?
লরেন্স গনসাল্ভেস

1
@ লরেন্স: আপনি জাভ্যাককে একবারে একটি সম্পূর্ণ প্যাকেজ দিতে পারতেন, তবে তারপরে এটি সেই প্যাকেজের সমস্ত কিছুই পুনরায় কম্পাইল করবে (যেহেতু আপনি এটি করতে বলেছিলেন)। এটি সত্য যে জাভা সংকলকটি বেশ দ্রুত, তবে আপনি যদি কিছু পরিবর্তন করার পরে পুনরায় সংকলনের জন্য ন্যূনতম কোন ক্লাসগুলি নির্ধারণ করতে দেন তা আরও দ্রুত।
গ্রেগ হিউগিল

আপনি কি কেবল আপনার "মূল" শ্রেণিটি সঙ্কলন করতে জাভাকে বলার কথা উল্লেখ করছেন এবং তারপরে এটি স্বয়ংক্রিয়ভাবে স্টাফ তৈরি করে যা এর উপর নির্ভর করে? সর্বশেষে আমি চেক করেছি (স্বীকৃতভাবে, সম্ভবত 1.4 এ) যা মারাত্মকভাবে অবিশ্বাস্য ছিল। -এক্সডিপেন্ড কিছুটা ভাল ছিল (তবে ধীর এবং এখনও ভাঙ্গা) এবং তারা এই পতাকাটি 1.3-এ সরিয়ে ফেলেছে।
লরেন্স গনসাল্ভেস

4
এছাড়াও, এটি এখনও ব্যাখ্যা করে না যে আমি কেবল সোজা জাভ্যাকের চেয়ে কেন পিঁপড়া বা মাভেন ব্যবহার করব ...
লরেন্স গনসালভেস

28

প্রশ্ন একটি ভুল ধৃষ্টতা উপর ভিত্তি করে: ডেভেলপারদের একটি অ-তুচ্ছ সংখ্যা কি ব্যবহার make। দেখুন অ্যান্ট বনাম ম্যাভেন: জাভা বিল্ড সরঞ্জাম । কোনও বিকাশকারী কেন ব্যবহার করবেন না তা হিসাবে make: অনেক বিকাশকারী হয় হয় না কখনও ব্যবহার করেছেন make, বা এটি ব্যবহার করেছেন এবং হাজার আগুনের চেয়ে উত্তপ্ত জ্বলন্ত আগুনে এটি ঘৃণা করেছেন। যেমন, তারা বিকল্প সরঞ্জাম ব্যবহার করে।


10
আমরা এটি ব্যবহার করি এবং আগুনটি হাজার ও এক রোদের চেয়েও উত্তপ্ত।
পুনরুদ্ধার করে

4
@ রাইকেলস: ইঞ্জিনিয়ারিং তৈরির প্রতি কি কেবল ঘৃণা বা নিজেকে তৈরি করা? কীভাবে পিপীলিকা, মাভেন বা অন্য কিছু ভাল হবে (যেমন এটি তার শ্রেণীর জন্য একটি খারাপ সরঞ্জাম তৈরি করেছে)?
ব্যবহারকারী 1

5
@ ইউজার 1 makeএর অনেকগুলি "বৈশিষ্ট্য" রয়েছে যা এটি লেখার সময় বোধগম্য হয়েছিল, তবে এখন এটি বাগের মতো, যেমন, আপনাকে অবশ্যই কোনও জায়গায় টিএবি অক্ষর ব্যবহার করতে হবে, স্পেস নয় certain এই ধরণের জিনিস সম্ভবত সত্যই অভিজ্ঞ যারা বিরক্ত না make, কিন্তু এটি আমাদের বাকি বাদাম চালায়।
হ্যাঙ্ক গে

4
@ হ্যাঙ্কগুই: আপনার সম্পাদককে সেই বিশদ সম্পর্কে উদ্বিগ্ন হতে দিন। যদি আপনার সম্পাদক ট্যাব <>> স্থান সেটিংস সঠিকভাবে পরিচালনা করতে না পারে তবে একটি নতুন সম্পাদক পান এবং আপনি আরও সুখী হন। তবে আপনি ঠিক বলেছেন যে গতিশীল নির্ভরতা ( make dependযে কেউ?) যেভাবে পরিচালনা করা হয় তার মতো অনেকগুলি বৈশিষ্ট্য পুরানো
ডি। শাওলি

3
@ ইউজার 1 এটি আমরা যে প্রকল্পটি তৈরি করছি তার স্কেল। আমাদের কাছে মেক ফাইলগুলি তৈরি এবং নির্ভরতা বজায় রাখার পুরো সময়ের কর্মী সদস্য রয়েছেন। মাভেন ব্যবহার করে আমি এটি আরও ম্যানেজমেন্টযোগ্য বলে মনে করেছি। এখন এই বলে যে মাভেনও নিখুঁত ছিল না। নির্ধারিত সেটআপের পরে কিছুটা আলাদা এমন একটি বিল্ড করার জন্য এক্সএমএল সেটিংসের কী প্রয়োজন তা নির্ধারণের চেয়ে আর কিছু উত্সাহজনক নয়।
পুনরুদ্ধার করে

28

আসলে, মেক সমস্ত পুরানো জাভা ফাইলগুলির একটি কমান্ডে পুনঃসংশোধন পরিচালনা করতে পারে। আপনি যদি ডিরেক্টরিতে সমস্ত ফাইল সংকলন করতে চান না বা একটি নির্দিষ্ট ক্রম চান না তবে প্রথম লাইনটি পরিবর্তন করুন ...

JAVA_FILES:=$(wildcard *.java)
#
# the rest is independent of the directory
#
JAVA_CLASSES:=$(patsubst %.java,%.class,$(JAVA_FILES))

.PHONY: classes
LIST:=

classes: $(JAVA_CLASSES)
        if [ ! -z "$(LIST)" ] ; then \
                javac $(LIST) ; \
        fi

$(JAVA_CLASSES) : %.class : %.java
        $(eval LIST+=$$<)

4
নিস! আমি সেরকম কিছু খুঁজছিলাম। যখন সর্বজনীন ক্লাসিকটি সূক্ষ্মভাবে কাজ করে তখন প্রতিটি ভাষার জন্য আলাদা বিল্ড সরঞ্জাম ব্যবহার করার দরকার নেই। ধন্যবাদ!
আরএসপি

17

প্রত্যেকের প্রযুক্তিগত যোগ্যতা সম্পর্কে অন্যান্য সমস্ত উত্তর সত্য। Antএবং Mavenজাভা এর চেয়ে মেকিংয়ের তুলনায় আরও উপযুক্ত হতে পারে বা হ্যাঙ্ক গে যেমন উল্লেখ করেছে, তারা তা নাও করতে পারে :)

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

হ্যাঁ, এর অংশটি হ'ল আপনি যে ভাষায় টুলিং করছেন তাতে লিখিত সরঞ্জামগুলি ব্যবহার করা।


7
জাভা সম্প্রদায়কে এক্সএমএল দ্বারা প্ররোচিত করার সময় পিঁপড়ের উত্থানও হয়েছিল। (যা XML এর কোনও জায়গা নেই তা বলার অপেক্ষা রাখে না))
লরেন্স গনসাল্ভেস

3
@Laurence গনসালভেস, যে হয় তাই সত্য। তবে দয়া করে, আমরা এখানে ফ্যাডের বিষয়ে কথা বলি না :) আমি তখন জাভা দেব শিখিয়েছিলাম, এবং সমস্ত কিছুই এক্সএমএল ছিল। এখন এটি এক্সএমএল, কিন্তু কেউ পাত্তা দেয় না।
ড্যান রোজনস্টার্ক

1
টুলিং মন্তব্য একটি আকর্ষণীয়। makeইউনিক্স ব্যাকগ্রাউন্ড থেকে আসে সুতরাং দরকারী কমপ্যাক্ট ইউটিলিটিগুলি লিখে এবং সেগুলি একসাথে পাইপলাইনের মাধ্যমে সরঞ্জামটি সম্পন্ন করা হয়। এজন্য বেশিরভাগ স্টিচিং শেল কমান্ড ব্যবহার করে করা হয়।
ডি.শ্যাওলি

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

12

পিঁপড়া এবং পরে মাভেনকে কিছু Makeপ্রক্রিয়াজাতকরণের প্রক্রিয়া তৈরি করার জন্য ডিজাইন করা হয়েছিল (প্রক্রিয়াটিতে নতুন তৈরি করার সময়) এটি কেবল বিবর্তন।

... এরপরেই, বেশ কয়েকটি ওপেন সোর্স জাভা প্রকল্প বুঝতে পেরেছিল যে পিঁপড়া মেকফাইলগুলির সাথে তাদের যে সমস্যাগুলি করেছে তা সমাধান করতে পারে ....

Http://ant.apache.org/faq.html# ইতিহাস থেকে

তারা যে কোনও কিছু সমাধান করে বা কেবল শিখার জন্য একটি অতিরিক্ত বিন্যাস তৈরি করুক তা বিষয়গত বিষয়। সত্যটি এটি প্রতিটি নতুন আবিষ্কারের ইতিহাসের চেয়ে অনেক বেশি: স্রষ্টা বলেছেন যে এটি অনেকগুলি সমস্যার সমাধান করে এবং মূল ব্যবহারকারীরা বলেন যে সেগুলি গুণাবলী।

এটির প্রধান সুবিধাটি হ'ল জাভাটির সাথে সংহত হওয়ার সম্ভাবনা।

আমি অনুমান করি যে একই ধরণের ইতিহাস rakeউদাহরণ সহকারে থাকবে ।


4
এটি খুব নির্দিষ্ট নয়। মাভেন তৈরির কারণে কোন মাথাব্যাথা সমাধান করে?
লরেন্স গনসালভেস

1
@ গনসালভস: ভাল এটি প্রতিটি নতুন প্রযুক্তির বিষয়গত দিকগুলির মধ্যে একটি, বিকল্পটির স্রষ্টা বলেছেন যে এটি প্রচুর সমস্যা সমাধান করে এবং প্রতিস্থাপন প্রযুক্তির স্রষ্টারা বলে যে এগুলি ত্রুটিগুলি নয় তবে গুণাবলী এবং আরও অনেক কিছু। আমি মনে করি এই বিশেষ পরিস্থিতিতে জাভা সংহতকরণ এবং বাক্সের বাইরে ক্রস সংকলন ছিল
অস্কার রাইজ

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

2
হ্যাঁ, তবে নতুন বিকল্পের সেরা স্রষ্টা যখন বলতে পারেন যে "এটি পুরানো একজনের সমস্যা সমাধান করে" আসলে এই সমস্যাগুলি কী কী তা কোনটি ব্যবহারের বিকল্প বিবেচনা করে তাদের পক্ষে এতটা কার্যকর নয় তা না বলেই। পিপীলিকা আমার তৈরি সমস্যাগুলি সমাধান করে বা আমার জন্য নতুন সমস্যাগুলি প্রবর্তন করার সময় সমস্যাগুলি হিসাবে বিবেচিত নয় এমন বিষয়গুলি সমাধান করে?
লরেন্স গনসালভেস

9

মেভেন (এবং আইভির-সক্ষম পিঁপড়া সেটআপগুলি) তৈরির মাধ্যমে সমাধান করা প্রধান সমস্যাগুলির মধ্যে একটি হ'ল স্বয়ংক্রিয়ভাবে নির্ভরতা সমাধান এবং আপনার নির্ভরতা জারগুলি ডাউনলোড করা।


6

আমি মনে করি সর্বাধিক ব্যাখ্যাটি হ'ল বেশ কয়েকটি কারণ জাভা সম্প্রদায়ের মধ্যে একটি জটিল সময়ে (১৯৯০ এর দশকের শেষের দিকে) মেক ব্যবহারকে নিরুৎসাহিত করেছিল:

  1. জাভা একাধিক প্ল্যাটফর্মকে অন্তর্ভুক্ত করার কারণে, জাভা প্রোগ্রামাররা সাধারণত ইউনিক্স সরঞ্জামগুলিতে পারদর্শী ছিল না যতটা প্রোগ্রামাররা সাধারণত ইউনিক্স পরিবেশে আবদ্ধ ছিল (যেমন, সি এবং পার্ল প্রোগ্রামার)। নোট করুন যে এটি সাধারণ। নিঃসন্দেহে ইউনিক্সের গভীর বোঝার সাথে জেভা প্রোগ্রামারদের উপহার দেওয়া হয়েছিল এবং রয়েছে।
  2. ফলস্বরূপ তারা তৈরিতে কম পারদর্শী ছিল এবং কার্যকরভাবে কীভাবে ব্যবহার করতে হয় তা জানত না।
  3. যদিও জাভাটি দক্ষতার সাথে সংকলন করে এমন একটি ছোট এবং সাধারণ মেকফিল লিখতে সম্ভব হয়েছে, তবে প্ল্যাটফর্ম-স্বতন্ত্র উপায়ে এটি করার জন্য অতিরিক্ত যত্নের প্রয়োজন।
  4. ফলস্বরূপ একটি অভ্যন্তরীণ প্ল্যাটফর্ম-স্বতন্ত্র বিল্ড সরঞ্জামের জন্য একটি ক্ষুধা ছিল।
  5. এই পরিবেশেই পিঁপড়া এবং পরে মাভেনের সৃষ্টি হয়েছিল।

সংক্ষেপে, যদিও মেকটি অবশ্যই জাভা প্রকল্পগুলির জন্য ব্যবহার করা যেতে পারে, সেখানে একটি মুহূর্ত ছিল এটিকে ডি ফ্যাক্টো জাভা বিল্ড সরঞ্জাম হিসাবে তৈরি করার। সেই মুহূর্তটি কেটে গেল।


5

স্ক্রিপ্টগুলি অন্তর্নিহিত প্ল্যাটফর্ম নির্ভর করে Make জাভা প্ল্যাটফর্মটি স্বাধীন হওয়ার কথা। সুতরাং একটি বিল্ড সিস্টেম থাকা যা কেবলমাত্র একটি প্লাটফর্মে একাধিক প্ল্যাটফর্মের সোর্সবেসের জন্য কাজ করে kind


5

সংক্ষিপ্ত উত্তর: কারণ makeভাল না। এমনকি সি ফ্রন্টে আপনি দেখতে পাচ্ছেন অনেকগুলি বিকল্প পপ আপ।

দীর্ঘ উত্তর: makeকয়েকটি ত্রুটি রয়েছে যা এটি সি সংকলনের জন্য সবে উপযুক্ত করে তোলে এবং জাভা সংকলনের জন্য মোটেই অনুপযুক্ত। আপনি যদি চান তবে এটি জাভা সংকলন করতে বাধ্য করতে পারেন, তবে সমস্যাগুলির মধ্যে ছড়িয়ে পড়া আশা করেন, যার মধ্যে কোনওটির কাছে উপযুক্ত সমাধান বা কর্মপরিকল্পনা নেই। এখানে কয়েকটি দেওয়া হল:

নির্ভরতা রেজোলিউশন

makeঅন্তর্নিহিতভাবে ফাইলগুলি একে অপরের উপর গাছের মতো নির্ভরতার প্রত্যাশা করে, যার মধ্যে একটি ফাইল অন্য কয়েকটি তৈরির ফলাফল। শিরোলেখ ফাইলগুলির সাথে ডিল করার সময় এটি সিটিতে ইতিমধ্যে ব্যাকফায়ার। এর হেডার ফাইলগুলিতে সি ফাইলের নির্ভরতা উপস্থাপনের makeজন্য একটি makeস্পেসিফিক অন্তর্ভুক্ত ফাইলের প্রয়োজন হয় , সুতরাং পরবর্তীটির পরিবর্তনে পূর্বের পুনর্নির্মাণের কারণ হতে পারে। তবে, যেহেতু সি ফাইল নিজেই পুনরায় তৈরি করা হয়নি (নিছক পুনর্নির্মাণ), তাই প্রায়শই লক্ষ্য হিসাবে নির্দিষ্টকরণের প্রয়োজন হয় .PHONY। ভাগ্যক্রমে, জিসিসি স্বয়ংক্রিয়ভাবে এই ফাইলগুলি তৈরি করতে সহায়তা করে।

জাভাতে, নির্ভরতা বৃত্তাকার হতে পারে এবং makeবিন্যাসে শ্রেণি নির্ভরতা স্বয়ংক্রিয়ভাবে উত্পন্ন করার কোনও সরঞ্জাম নেই । antএর Dependকাজ, পরিবর্তে, ক্লাস ফাইলটি সরাসরি পড়তে পারে, এটি কোন শ্রেণিগুলি আমদানি করে তা নির্ধারণ করতে পারে এবং শ্রেণীর ফাইলটি যদি কোনওটির মেয়াদ শেষ হয়ে যায় তবে তা মুছে ফেলতে পারে। এটি ব্যতীত, কোনও তুচ্ছ-নির্ভর নির্ভরতা আপনাকে বারবার পরিষ্কার বিল্ডগুলি ব্যবহার করতে বাধ্য করতে এবং বিল্ড সরঞ্জাম ব্যবহারের কোনও সুবিধা অপসারণ করতে বাধ্য হতে পারে।

ফাইলের নামগুলিতে শূন্যস্থান

জাভা বা সি makeউভয়ই আপনার উত্স কোড ফাইলের নামগুলিতে শূন্যস্থান ব্যবহার করতে উত্সাহিত করে না, যদিও ফাঁকা স্থান ফাইল ফাইলের মধ্যে থাকলেও সমস্যা হতে পারে be উদাহরণস্বরূপ বিবেচনা করুন, যদি আপনার উত্স কোডটি বিদ্যমান থাকে C:\My Documents\My Code\program\src। এটি ভাঙ্গার জন্য যথেষ্ট হবে make। এটি কারণ makeফাইলনামগুলিকে স্ট্রিং হিসাবে বিবেচনা করে। antপাথকে বিশেষ বিষয় হিসাবে বিবেচনা করে।

বিল্ড করার জন্য ফাইল স্ক্যান করা হচ্ছে

makeপ্রতিটি টার্গেটের জন্য কোন ফাইলগুলি তৈরি করতে হবে তা স্পষ্টভাবে সেট করার প্রয়োজন। antউত্স ফাইলগুলির জন্য স্বয়ংক্রিয়-স্ক্যান হওয়া ফোল্ডারটি নির্দিষ্ট করার অনুমতি দেয়। এটি একটি গৌণ সুবিধার মতো মনে হতে পারে তবে জাভাতে প্রতিটি নতুন শ্রেণির জন্য একটি নতুন ফাইলের প্রয়োজন consider প্রকল্পে ফাইল যুক্ত করা একটি বড় ঝামেলা দ্রুত হয়ে উঠতে পারে।

এবং এর সাথে সবচেয়ে বড় সমস্যা make:

মেকটি পসিক্স-নির্ভর

জাভার মূলমন্ত্রটি "একবারে সর্বত্র চালিত করুন" is তবে সেই সংকলনটি পসিক্স-ভিত্তিক সিস্টেমে সীমাবদ্ধ করা, যা জাভা সমর্থনটি আসলে সবচেয়ে খারাপ, উদ্দেশ্যটি নয়।

বিল্ড রুলস makeমূলত ছোট bashস্ক্রিপ্টগুলি। যদিও makeউইন্ডোজের কোনও বন্দর রয়েছে , এটি সঠিকভাবে কাজ করার জন্য, এটির একটি বন্দর দিয়ে বান্ডিল করতে হবে bash, যার মধ্যে ফাইল সিস্টেমের জন্য একটি পসিক্স এমুলেশন স্তর রয়েছে।

এটি দুটি প্রকারভেদে আসে:

  1. MSYS যা POSIX অনুবাদ ফাইল করার পথে সীমাবদ্ধ করার চেষ্টা করে এবং তাই বিশেষত এর জন্য তৈরি না হয়ে বাহ্যিক সরঞ্জামগুলি চালনার সময় অপ্রীতিকর গোটচেগুলি থাকতে পারে।

  2. cygwinযা একটি সম্পূর্ণ POSIX অনুকরণ সরবরাহ করে। ফলস্বরূপ প্রোগ্রামগুলি এখনও সেই ইমুলেশন স্তরের উপর নির্ভর করে।

সেই কারণে, উইন্ডোজে, স্ট্যান্ডার্ড বিল্ড টুলটি মোটেও নয় make, বরং MSBuildএটি একটি এক্সএমএল-ভিত্তিক সরঞ্জামও, নীতিগতভাবে কাছাকাছি ant

বিপরীতে, antজাভাতে নির্মিত, সর্বত্র চলতে পারে এবং প্ল্যাটফর্ম-স্বতন্ত্র উপায়ে ফাইলগুলি পরিচালনা ও কমান্ড কার্যকর করার জন্য "টাস্ক" নামে আভ্যন্তরীণ সরঞ্জাম রয়েছে। এটি যথেষ্ট বহুমুখী যা ব্যবহারের antচেয়ে আপনি উইন্ডোজে সি প্রোগ্রাম তৈরির পক্ষে সহজতর সময় পেতে পারেন make

এবং একটি সর্বশেষ নাবালক:

এমনকি সি প্রোগ্রামগুলি স্থানীয়ভাবে মেক ব্যবহার করে না

আপনি প্রথমে এটি লক্ষ্য করতে পারেন না, তবে সি প্রোগ্রামগুলি সাধারণত একটি দিয়ে প্রেরণ করা হয় না Makefile। এগুলি একটি CMakeLists.txt, বা একটি bashকনফিগারেশন স্ক্রিপ্ট সহ প্রেরণ করা হয় যা প্রকৃত উত্পন্ন করে Makefile। বিপরীতে, ব্যবহার করে তৈরি করা জাভা প্রোগ্রামের উত্সটি পূর্ব-অন্তর্নিহিত স্ক্রিপ্টের antসাথে প্রেরণ করা হয় ant। এ Makefileহ'ল অন্য সরঞ্জামগুলির একটি পণ্য - makeএটি তার নিজের একটি বিল্ড টুল হিসাবে কতটা অনুপযুক্ত। antস্বতন্ত্র এবং কোনও অতিরিক্ত প্রয়োজনীয়তা বা নির্ভরতা ছাড়াই আপনার জাভা বিল্ড প্রক্রিয়াটির জন্য আপনার প্রয়োজনীয় সমস্ত কিছু নিয়ে কাজ করে।

আপনি যখন antকোনও প্ল্যাটফর্মে চালান , এটি ঠিক কাজ করে (টিএম)। আপনি এটি সঙ্গে পেতে পারেন না make। এটি অবিশ্বাস্যভাবে প্ল্যাটফর্ম এবং কনফিগারেশন নির্ভর।


4

আমি যদি না কেউ অনুমান করি যে জাভা জন্য মেক ব্যবহার করা কেউ ভুল (ভুল) না হয়।

"জিএনইউ মেক দিয়ে প্রকল্প পরিচালনা করা" (জিএফডিএল এর অধীনে উপলব্ধ) makeজাভা প্রকল্পগুলির সাথে ব্যবহারের জন্য নিবেদিত একটি সম্পূর্ণ অধ্যায় রয়েছে ।

যেহেতু এটিতে অন্যান্য কৌশলগুলির পরিবর্তে আপনি সেখানে একবার নজর রাখতে চাইতে পারেন তার পরিবর্তে মেক ব্যবহারের বিপরীতে একটি দীর্ঘ (এবং আশাকরি ভাল) তালিকা রয়েছে। (দেখুন: http://oreilly.com/catolog/make3/book/ )


এটি কি সঠিক সংক্ষিপ্তসার? মেক (বিভিন্ন স্বাদে) জাভা জন্য ব্যবহারযোগ্য, কিন্তু কিছু ব্যথা সঙ্গে। জাভা প্রকল্পগুলিকে আরও দ্রুত এবং নির্মাণে আরও সহজ করার জন্য পিঁপড়া এবং ম্যাভেন (এবং জ্যামেক ?) জাভা কিছু বিশেষ কাজ করে যা জাভা প্রয়োজন / পছন্দ করে। এগুলি জাভা-বিহীন প্রকল্পগুলির জন্য আরও প্ল্যাটফর্ম-স্বতন্ত্র বিল্ড প্রক্রিয়াতে ব্যবহার করা যেতে পারে তবে জাভাটির জন্য আরও সুরযুক্ত।
ফিল পেরি

3

পিঁপড়া মেকফিলসের চেয়ে এক্সএমএল কনফিগারেশন ওরিয়েন্টেড উন্নতি এবং ম্যাভেন পিপীলিকার উপর নির্ভরশীলতা তৈরির সরঞ্জাম উন্নতি। কিছু প্রকল্প তিনটি ব্যবহার করে। আমি মনে করি জেডিকে প্রকল্পগুলি মেকফিল এবং পিঁপড়ার মিশ্রণ ব্যবহার করত।


1

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


1

একসময় আমি জাভা প্রকল্পে কাজ করেছি যা গেমকে ব্যবহার করেছিল। আমার স্মৃতিচিহ্নটি বিরক্তিকর তবে আইআইআরসি জাভ্যাক প্রত্যাশা করে এমন প্যাকেজ ডিরেক্টরি কাঠামোর সাথে আমাদের কাজ করতে খুব কঠিন সময় হয়েছিল। আমি এও মনে করি যে জেআর ফাইলগুলি তৈরি করা কোনও ঝামেলা ছিল যদি না আপনার কাছে কিছু তুচ্ছ থাকে।


1

অ্যাপাচিএন্ট মেকের মতো কিছু নয়। মেক ফাইলের মধ্যে নির্ভরতা এবং ফাইলগুলি কীভাবে তৈরি করবেন সে সম্পর্কে বর্ণনা করা is পিঁপড়াটি "কার্য" এর মধ্যে নির্ভরতা সম্পর্কে এবং এটি একসাথে গ্লুইং বিল্ড স্ক্রিপ্টগুলির আরও অনেক উপায়।

এটি আপনাকে অ্যান্টভিএসমেককে সহায়তা করতে পারে


ডাউনভোটদের কারণগুলি সম্পর্কে আমি সত্যিই জানতে চাই।
হাজেলো

0

এন্টি এবং মাভেন বিল্ড নির্ভরতা গ্রাফ এবং আরও 'আধুনিক' দৃষ্টিকোণ থেকে এটির পরিচালনার দিকে যান ... তবে অস্কার যেমন বলেছেন, মেক দিয়ে পুরানো সমস্যাগুলি সমাধান করার চেষ্টা করার সময় তারা তাদের নিজস্ব সমস্যা তৈরি করেছিল।


0

আমি কখনও জাভা প্রকল্পগুলির জন্য জিএনইউ মেক ব্যবহার করি নি, তবে আমি জেএমকে ব্যবহার করতাম । দুঃখজনকভাবে 2002 সালের পরে এটি আপডেট হয়নি।

এটিতে কিছু জাভা-নির্দিষ্ট কার্যকারিতা ছিল তবে এটির আকার উল্লেখযোগ্যভাবে বৃদ্ধি না করে আপনার উত্স টার্বলগুলিতে অন্তর্ভুক্ত করতে যথেষ্ট ছোট ছিল।

আজকাল আমি সবেমাত্র যে কোনও জাভা বিকাশকারীকে আমি কোড শেয়ার করি তার সাথে অ্যান্ট ইনস্টল করা আছে।

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