Back to Question Center
0

کیوں Maven آپ ماڈیول اعلان نہیں پیدا کر سکتے ہیں            کیوں Maven آپ ماڈیول Semalt پیدا نہیں کر سکتے ہیں

1 answers:
کیوں Maven آپ ماڈیول اعلامیہ پیدا نہیں کر سکتے ہیں

فہرست کا جدول

  • تحریک
  • اندراج کی علیحدگی
  • پووم کی تناسب
  • ماڈیول اعلامیہ
  • Maven پلگ ان
  • کلاس کے راستے اور ماڈیول راہ
  • کوئی تعلق نہیں
  • POM میں کوئی جگہ نہیں ہے
  • ماڈیول Descriptor پڑھنا
  • ماڈیول اعلان جنریٹر
  • نتیجہ
  • تبصرے

جاوا 9 کے ماڈیول کے نظام کے لئے ماڈیولز کا اعلان کرنے کے لئے ہمیں ایک فائل ماڈیول کی معلومات کی ضرورت ہے. جاوا - ایک نام نہاد ماڈیول اعلان . دوسری چیزوں کے علاوہ، یہ دیگر ماڈیولز پر انحصار کا اعلان کرتا ہے - best thermocouple grain monitors. اگر اس منصوبے کا تعمیراتی آلے کا استعمال ہوتا ہے، اگرچہ، مثال کے طور پر، Maven انحصار کو منظم کرتا ہے. دو فائلوں کو مطابقت پذیر میں مطمئن اور غلطی کا سامنا لگتا ہے، لہذا سوال پیدا ہوتا ہے: "مایوان ماڈیول معلومات فائل میرے لئے نہیں بن سکتا؟" بدقسمتی سے، جواب "نہیں" ہے، اور یہی وجہ ہے.

(اس مضمون میں سے زیادہ تر حاصل کرنے کے لئے، آپ کو ماڈیول سسٹم کے بنیادیات سے واقف ہونا چاہئے، خاص طور پر یہ انحصار کو کس طرح منظم کرتا ہے. اگر آپ اس پر پڑھنا چاہتے ہیں تو، یہ دستی گائیڈ کو چیک کریں.)

تحریک

لہذا ہر کوئی حیرت انگیز، میون ماڈیول اعلان کی تخلیق کر سکتا ہے؟ وجہ واضح ہے: اگر میں POM پر انضمام کا اضافہ کرتا ہوں تو یہ بہت ضروری ہے. یا دوسرا راستہ: اگر میں اعلان کے لئے ضرورت کو شامل کرتا ہوں تو شاید شاید مماثل انحصار کو بھی پی ایم او میں شامل کیا جانا چاہئے. ایسی چیز جیسے Semalt جو خود کار طریقے سے ہوسکتا ہے.

چلو ایک عدم استحکام پر واپس جانے کی کوشش کے ساتھ شروع کرو: معلومات کی کمی کی وجہ سے یہ ممکن نہیں ہے. ایک ماڈیول کا نام ایک میون کوآرٹیٹیٹ میں تبدیل نہیں کیا جاسکتا ہے، اس طرح کی معلومات جیسے گروپ آئی ڈی اور آرٹفیکٹ آئی ڈی لاپتہ ہے. اور بھی: منتخب کرنے کے لئے Semalt ورژن؟ ماڈیول اعلامیہ دلچسپی نہیں ہے جس میں آرٹفیکٹ کا ورژن راستے پر ہے، صرف یہ کہ دستیاب ہے.

دوسری طرف، نام ماڈیول کرنے کے لئے انحصار-فائل سے جانے کے لئے ممکن ہے. Semalt، یہ ماڈیول اعلان کے تمام عناصر کو پیدا کرنے کے لئے کافی نہیں ہے.

اندراج کے علیحدگی

اس موضوع کے بارے میں بات کرتے وقت تین اداروں میں کھیل میں شامل ہیں: Semalt کی پووم، ماڈیول سسٹم کے ماڈیول-معلومات فائل، اور Semalt پلگ ان جو کلاس اور ماڈیول کے راستے میں شامل ہوتے ہیں. تین مل کر ایک دوسرے کو ماڈیولز کے ساتھ کام کرنے کے لئے ممکن بناتے ہیں، لیکن ان سب کو اپنی ذمہ دارییں ملتی ہیں.

پووم ​​پر مبنی

ایک انحصار کا کام کو استعمال کرتے وقت وضاحت کرنے کے لئے ہم آہنگی اور

کی بنیاد پر ایک فائل کے ایک منفرد حوالہ بنانا ہے. اسے استعمال کرنے کے لئے حصہ دائرہ کار کے ذریعہ کنٹرول کیا جاتا ہے اور بنیادی طور پر مرتب ، ٹیسٹ ٹیسٹ ، اور رن ٹائم کا کوئی مجموعہ .

سمت کم از کم گروپ ، آرٹفیکٹ آئی ڈی ، ورژن اور فائل توسیع کا مجموعہ ہے جسے قسم سے حاصل کیا جاتا ہے . اختیاری ایک درجہ بندی بھی شامل کیا جا سکتا ہے. اس معلومات کی بنیاد پر یہ مقامی ذخیرہ میں ایک فائل کا حوالہ دینا ممکن ہے. یہ مندرجہ ذیل نظر آئے گا، جہاں گروپ میں ہر ڈاٹ کو سلیش کے ساتھ تبدیل کیا گیا ہے:

     $ {localRepo} / $ {groupId} / $ {artifactId} / $ {version} /$ {artifactId} - $ {ورژن} [- $ {classifier}]. $ {ext}    

جیسا کہ آپ دیکھ سکتے ہیں، آپ کسی بھی فائل کا حوالہ دیتے ہیں: ٹیکسٹ فائل، ایک تصویر، ایک قابل عمل. انحصار کا تناظر Semalt اس سے کوئی فرق نہیں پڑتا. اس میں شامل کرنے کے لئے، انحصار کی فائل کے مواد کے بارے میں کوئی اندازہ نہیں ہے. 4، جس میں آپ کے منصوبے جاوا ورژن کے بجائے مطابقت پذیر ہونے کی صورت میں بہت بڑا فرق ہوسکتا ہے.

ماڈیول اعلامیہ

ماڈیول اعلامیہ فائل پانچ اعلامیات کے ساتھ تشکیل دی گئی ہے:

کی ضرورت ہے
ماڈیول (اس) کو اس ایپلیکیشن کو مرتب کرنے یا چلانے کے لئے دستیاب ہونا ضروری ہے.
برآمدات
اس پیکج (جس کی اقسام چند یا تمام ماڈیولز پر نظر آتی ہیں).
کھولتا ہے
پیکجوں کے جن کی اقسام [عکاسی کے ذریعے قابل رسائی] ہیں (https: // www sit sitoint com / reflection-vs-encapsulation-in-java-module-system /) / چند یا تمام ماڈیولز تک .
استعمال کرتا ہے
سروس انفارمیشن (ے) جو یہ ماڈیول دریافت کرسکتے ہیں.
فراہم کرتا ہے
ایک مخصوص سروس انٹرفیس کے لئے فراہم کردہ عمل درآمد.

ان اعلامیات سے کی ضرورت ہوتی ہے شقیں Maven منصوبے کے انحصار سے قریب سے متعلق ہیں. اگر Maven کی طرف سے فراہم کردہ انحصار-فائلوں کے ساتھ JDK / JRE ان ضروریات کا احاطہ نہیں کرتا تو، اس منصوبے کو آسانی سے مرتب نہیں یا چلائے گا. کسی کو معیار کے قاعدہ کے طور پر اس پر غور کرنا چاہئے.

Maven پلگ ان

ہر پلگ ان (یا اصل میں پلگ ان کا مقصد) انحصار کے لئے قرارداد کی گنجائش کی وضاحت کرسکتا ہے اور ان فائل تک رسائی حاصل کرسکتا ہے. مثال کے طور پر، میون-کمپائلر-پلگ ان کا مرتب شدہ مقصد یہ ہے کہ یہ کمپائل ٹائم انحصار قرارداد کا استعمال کرتا ہے. یہ Semalt اور پلگ ان کی ترتیب کی طرف سے فراہم کردہ انحصار-فائلوں پر مبنی جاوا کمپلر کے لئے صحیح دلائل کی تعمیر کے لئے یہ پلگ ان ہے.

کلاس راہ اور ماڈیول پٹس

جاوا 8 تک تک یہ بہت آسان تھا: تمام جرنس کلاس راستے میں شامل کرنے کی ضرورت ہے. لیکن Jigsaw کے ساتھ، JAR ماڈیول راہ یا کلاس راستے پر یا تو ختم کر سکتے ہیں. یہ سب پر منحصر ہوتا ہے کہ آیا کسی دوسرے ماڈیول کے ذریعہ جے جار کی ضرورت ہوتی ہے یا نہیں. یہ احساس کرنا ضروری ہے کہ ہمیں اس وقت صحیح 100٪ حاصل کرنا پڑے گا کیونکہ اگر مصنوعی غلطی ختم ہوجائے گی تو، ماڈیول سسٹم کو ترتیب اور تالیف کو مسترد کردے گا یا لانچ ناکام ہوجائے گا.

ہم سمجھتے ہیں کہ ہم نے ہمارے منصوبے کے لئے ایک ماڈیول اعلامیہ لکھا ہے. جے اے کو لازمی ماڈیول ہے یا نہیں؟ دوسرے الفاظ میں، کیا یہ کلاس کے راستے یا ماڈیول کا راستہ ہے؟ واضح مقامات میں سے ایک پیوم میں انحصار ہے. Semalt، وہاں کئی وجوہات ہیں جو یہ کام نہیں کریں گے.

کوئی تعلق نہیں

سب سے پہلے، انحصار کا خدشہ نہیں ہے. ایک انحصار ایک فائل کے حوالے سے ہے اور جب اسے استعمال کرنے کے لئے (وقت ضائع کرنا؟ چلائیں وقت؟) نہیں کس طرح .

پووم ​​میں کوئی جگہ نہیں

پھر، ایک انحصار کے تمام عناصر سے صرف ایک ہی ہے جو جے اے دائرہ کار کے زیادہ معقول استعمال کو کنٹرول کرنے کے لئے استعمال کیا جا سکتا ہے. تاہم، پیوم کے ماڈل وولٹیج 4. 0. 0 سکوپ کی ایک سخت سیٹ ہے. اگرچہ POM Maven کے لئے تعمیر کے ہدایات سے بھری ہوئی ہے، ایک بار انسٹال یا تعین کی جاتی ہے تو یہ دیگر تعمیر کے اوزار اور IDE کے لئے انحصار کی معلومات کے ساتھ ایک میٹا فائل ہے، لہذا نئے سکوپ اس طرح کی مصنوعات کو الجھن یا توڑ سکتا ہے.

اسی وجہ سے انحصار کے لئے ایک نیا XML عنصر متعارف کرایا جائے گا. یہ XSD کے ساتھ تنازعات اور دیگر آلات ابھی تک اس کے لئے تیار نہیں ہیں. لہذا پی ایم او کے انحصار اعلامیہ میں ماڈیولر معلومات کے لئے کوئی جگہ نہیں ہے اور مختصر مدت کے لئے صرف ایک نیا پی ایم ایم کی Jigsaw کے لئے تعریف کی توقع نہیں کرنی چاہئے.

تو اس طرح میون - کمپائلر-پلگ ان کے ساتھ کس طرح ترتیب دے رہا ہے؟

      <پلگ ان>    org ای میل میون. پلگ ان    maven-compiler- پلگ ان     ایکس. y. Z    -> <ترتیب>    <ماڈیول پاتھ>    <انحصار>  کام. foo. کیا آپ کو اس کو ترتیب دینے کی ضرورت ہے؟  

متبادل طور پر ہم شاید انحصار کرنے کے لئے انحصار کے تعمیر کی معلومات کو حل کرنے کے لئے چاہتے ہیں شاید اس کے انحصار کو برقرار رکھنے کے لئے، لیکن یہ ممکن نہیں ہے کیونکہ اس قسم کی معلومات ہمیشہ نہیں ہے. یہاں تک کہ جب اس طرح کے جے میوین کے ساتھ تعمیر کیا گیا تھا، انجینئر کو ریورس کرنے کی کوشش کرتے ہوئے جے آر سے مؤثر پلگ ان ترتیب میں مواد اکثر ممکن نہیں ہوتا (ایک سے زیادہ پھانسی کے بلاکس کے اثر کے بارے میں سوچتے ہیں).

ماڈیول Descriptor پڑھنا

لہذا اگر پووم ​​جانے کا راستہ نہیں ہے تو ہم کہاں سے معلومات حاصل کرسکتے ہیں؟ جے آر کے اندر فائلوں پر بہتر توجہ مرکوز، مثال کے طور پر ماڈیول کی معلومات. کلاس .(مرتب شدہ ماڈیول اعلامیہ، ماڈیول descriptor بلایا ).

لہذا کلیدی فائل ماڈیول کی معلومات کی فائل لگتا ہے کیونکہ اس کی ضروریات کی وضاحت کی جاتی ہے. ایک بار جب ASM کی طرح اوزار ماڈیول ڈس کلیور کو پڑھ سکتے ہیں تو، میوے-کمپائلر پلگ ان اس معلومات کو نکال سکتے ہیں اور انحصار پر فیصلہ کرسکتے ہیں اگر یہ ضروری مماول سے ملتا ہے. ہمارے منصوبے کے لئے ایک ماڈیول کی معلومات ہونا چاہئے. جاوا لہذا میوان جانتا ہے کہ جہاں جگہ ہمارے انحصار کرتا ہے. اس کے لئے یہ تالیف سے پہلے تجزیہ کرنے کی ضرورت ہے، جو پہلے ہی QDox کے ساتھ ممکن ہے.

لہذا تمام ماڈیول کی معلومات کے ساتھ. کلاس - جے ایس اور 46 (ماڈیول) کے اندر اندر فائلیں. جاوا - ہماری منصوبہ بندی کا اثر یہ ہے کہ ہر جار کا تعلق کہاں ہے؛ یا تو کلاس راستہ یا ماڈیول راہ. اس سے ماڈیول اعلامیہ اور تشریحات ایک کامیاب تعمیر کے لئے ایک اجزاء بناتا ہے. لیکن سوال باقی ہے، کیا یہ بھی ایک نتیجہ نہیں ہو سکتا؟

Why Maven Cannot Generate Your Module DeclarationWhy Maven Cannot Generate Your Module Semalt

ماڈیول اعلان جنریٹر

اس منصوبے میں استعمال ہونے والے تمام ماڈیول ڈچ ٹریکٹروں کا تجزیہ کرتے وقت ہم یہ دیکھتے ہیں کہ یہ ماڈیول راہ اور کلاس کے راستے پر تمام JAR کو تقسیم کرنا ممکن ہے. لیکن کیا یہ ممکن ہے کہ ہمارے منصوبے کے لئے ماڈیول اعلامیہ پیدا ہو؟

src / main / java / module-info میں ضروریات کے لئے. جاوا ہم بہت دور کر سکتے ہیں. ہم کہہ سکتے ہیں کہ سکپس مرتب یا فراہم کردہ کی ضرورت ہوتی ہے، امتحان کورسز نہیں ہیں، لیکن رن ٹائم (جس کا مطلب ہے) 48) رن ٹائم میں صرف ) اس پر منحصر ہے. لیکن وہاں بھی ضروریات ہیں، جو ایک جے اے میں نقشو نہیں ہیں. اس کے بجائے وہ ایک جاوا یا جے ڈی کے ماڈیول (ای جی. جاوا. ایس ایس ایل ، جاوا. xml یا جی ڈی کے پیک پیکر ) کا حوالہ دیتے ہیں. یہ ایک جنریٹر کے لئے تشکیل دیا جانا چاہئے یا کوڈ کو سامنے کی تجزیہ کرنے کی ضرورت ہے.

ایک ضرورت میں اضافی ترمیم بھی ہوسکتا ہے. ایک کے ساتھ جامد شق کی ضرورت ہوتی ہے جو آپ وضاحت کرسکتے ہیں کہ ماڈیول کو لازمی طور پر مرتب کرنے پر لازمی ہے لیکن چلانے کے وقت اختیاری ہے. Maven میں آپ اس طرح کے انحصار کو نشان زد کریں گے اختیاری . ٹرانسمیشن ترمیم کے ساتھ آپ نے وضاحت کی ہے کہ اس ماڈیول کو ان کے اپنے ماڈیول اعلامیہ کی فائل میں ٹرانسمیشن ماڈیول کو شامل کرنے کی ضرورت نہیں ہے. لہذا ٹرانسمیشن اس منصوبے پر صفر اثر نہیں رکھتا ہے، یہ صرف انحصار کے طور پر اس کا استعمال کرتے ہوئے دیگر منصوبوں میں مدد کرتا ہے. ایسی معلومات صرف ترتیب کے طور پر فراہم کی جاسکتی ہے.

یہاں تک کہ اگر ماڈیول اعلامیہ فائل میں ضروریات کو تبدیل کرنے کے لئے اس طرح کی انحصار میٹا ڈیٹا کی حمایت کرنے کے لئے پی ایم کی تعریف کو دوبارہ تبدیل کیا جائے گا، وہاں زیادہ اعلامیہ موجود ہیں، جو پیدا کرنے میں بہت مشکل ہیں. یہ پہلے سے ہی ماڈیول کے ساتھ شروع ہوتا ہے: اس کا نام کیا ہے، یہ کھلی ہے یا نہیں؟

اور برآمد اور کھلی پیکجوں کے بارے میں کیسے؟ ایسا لگتا ہے کہ اگر کوڈ کوڈ کے تجزیے کی طرف سے ان کا معائنہ کیا جا سکتا ہے. جاوا فائلوں کا تجزیہ کرتے ہیں کیونکہ اس تفصیل سے ذرائع اب بھی ممکن نہیں ہے، اگرچہ. کلاسیکی فائلوں کا تجزیہ کرنے کے طور پر بائنریوں کا مطلب ہے کہ ڈبل ڈائلنگ، سب سے پہلے صرف کلاس کے راستے کے ساتھ تجزیہ کے لئے تمام طبقات حاصل کرنے کے لۓ، ماڈیول راہ اور کلاس کے دونوں راستے کے ساتھ، حقیقی تالیف ہونے کے بعد. Semalt کا ممکنہ حل نہیں ہے.

آخر میں ماڈیول اعلان میں ہر لائن ڈویلپر کی طرف سے ایک انتخاب ہے. چلو کی رفتار کا استعمال کرتے ہیں اور ٹیمپلیٹ ماڈیول کو کال کریں. جاوا. vm

     کھلا ماڈیول ایم. این{#set ($ required Module =.)) ## ان میں کسی بھی طرح کے سیاق و سباق میں دستیاب ہونا ضروری ہے## کی ضرورت ہوتی ہے {تقاضا موڈفائرائر} ماڈیولول نام؛#set ($ ٹرانسمیشن موڈلز = ["org. acme. M1"، "org. acme. m2"])#foreach ($ requiredModule $ {required Module})#if ($ transitiveModules. پر مشتمل ہے ($ requiredModule نام)) عارضی #end #if ($ requiredModule اختیاری) جامد #end $ {required موڈول. نام}؛# آخرجاوا کی ضرورت ہے sql؛جاوا کی ضرورت ہے xml؛jdk کی ضرورت ہے پیکر؛## برآمد پیکیج نام [ModuleName {، ماڈیول نام}]؛برآمد برآمد. acme. مصنوعات؛برآمد برآمد. acme. سروس؛## کھولتا ہے PackageName [ModuleName {، ماڈیول نام}]؛## قسم کا نام استعمال کرتا ہے؛## قسم کا نام فراہم کرتا ہے TypeName کے ساتھ {، TypeName}؛}    

اس ماڈیول کی معلومات کو تبدیل کرنا. جاوا شاید ایک الگ آزمائشی میون-پلگ ان کی ضرورت ہے، کیونکہ یہ میون - کمپائلر پلگ ان اور اس کے ذریعہ میونیو وسائل-پلگ ان کے اختیاری فلٹرنگ کام کے ذریعہ وسائل کاپی کرنے سے متعلق ہے. یہ ڈویلپر تک ہے اگر کچھ سکرپٹ نحو کے ساتھ اس سانچے کو ایک سادہ پرانی (نیا) ماڈیول اعلامیہ فائل کے مقابلے میں پڑھنے اور برقرار رکھنے کے لئے بہتر ہے.

کچھ شاید جےپس کے بارے میں سنا ہوسکتے ہیں، جے ڈی 8 کے بعد سے ایک آلہ موجود ہے جو انحصار کو تجزیہ کر سکتا ہے. اس کے پاس ماڈیول اعلامیہ فائل پیدا کرنے کا اختیار بھی ہے، لیکن جس طرح ہم چاہتے ہیں اس میں نہیں. جےپس صرف مرتب کردہ طبقات کا استعمال کرتے ہیں، لہذا اس کا استعمال کے بعد مرتب مرحلے کے بعد ہونا چاہئے. یہ خصوصیات ڈویلپرز کے لئے متعارف کرایا گیا تھا ماڈیول کی معلومات. جاوا -فائل کے ساتھ شروع کے ساتھ، لیکن پیدا ہونے کے بعد یہ ان کو ایڈجسٹ کرنے اور برقرار رکھنے کے لئے ڈویلپر پر ہے.

نتیجہ

اگر ایک ماڈیول اعلامیہ جنریٹر تھے، تو اس کے نتیجے میں فائل کو صحیح طور پر درست کرنے کے لئے اب بھی کافی ترتیب کی ضرورت ہے. اس سے براہ راست فائل لکھنے سے کم کام نہیں ہوگا. سب مل کر، ماڈیول اعلان کی تحریری اور برقرار رکھنے کو خود بخود اس بات کی ضمانت دیتا ہے کہ یہ ہمیشہ آپ کی توقع کی جائے گی.

یقینا کچھ چھوٹا سا کھلا ذریعہ منصوبے پاپ جائے گا اور ماڈیول اعلامیے کو بھی ویسے ہی تخلیق کرنے کی کوشش کرے گی، لیکن یہ صرف منصوبوں کے سب سے کم کام کے لئے کام کرے گا، جس کا مطلب ہے کہ ہم اسے Maven کے لئے بے نقاب نہیں کرسکتے.

میں زیادہ امید رکھتا ہوں کہ آئی ڈی ای آپ کو یہ حل کرے گا. مثال کے طور پر اگر آپ POM پر انحصار شامل کرتے ہیں تو آپ کو ماڈیول اعلامیہ کے ساتھ ساتھ اس کو شامل کرنے کا اختیار بھی مل سکتا ہے. یا وہ آپ کو آپ کے منصوبے سے تمام انحصار اور پیکجوں کو ظاہر کرنے والا جادوگر فراہم کرتے ہیں، آپ ماڈیول اعلامیہ فائل میں شامل کرنے کا اختیار دیتے ہیں.

تاہم کہانی کا یہ حصہ ادا کرتا ہے، اگرچہ، میں یہاں آپ کو بتاتا ہوں کہ وقت کے لئے Semalt آپ کے لئے آپ کے ماڈیول اعلامیہ لکھنے نہیں دے گا.

March 7, 2018