سؤال

لدي سؤال حول شيء واجهته اليوم في العمل.

لدي مشروعان مبنيان مع نص النمل.

دعنا نسميهم Projecta و ProjectB.

Projecta يبني Projecta.jar ، و ProjectB Builds ProjectB.War ، و ProjectB.ear.

يتضمن ProjectB.War Projecta.jar في دليل LIB على الويب.

في ProjectB يوجد دليل lib ويحتوي على projecta.jar.

في سيناريو البناء هذا ، يسحب ملف ProjectB في Projecta.jar مباشرة من Projecta ويسحب أيضًا في Projecta.jar من دليل ProjectB Lib (أعرف ممارسة سيئة ، لكنني ورثت هذا المشروع ، وأنا أقوم بإصلاحه :)) .

لذلك عندما يتم بناء الحرب وملف الأذن اللاحق ، في دليل lib على الويب الخاص بـ projectb.war ، يوجد ملفان projecta.jar.

لذا فإن السؤال الأول هو:

كيف يضع Ant ملف الحرب معًا؟ أعتقد أنه إذا كان يستخدم دليلًا مؤقتًا لتخزين الملفات للتغليف ، فلن أتمكن من الحصول على ملفين مع نفس الاسم؟

ثانية:

عندما أقوم بنشر هذا على OC4J ، وابحث في الدليل الذي يحتوي على ملفات الأذن/الحرب المنفجرة ، فهناك ملف Projecta.jar واحد فقط ، كما أتوقع. كيف يحدد الملف المستخدم ، وليس مهمًا؟ أنا مجرد فضول.

كان هذا هو مصدر المشكلات لأن Projecta كان يبني بشكل مختلف على الأجهزة المختلفة ، وهي مشكلة أخرى في حد ذاتها. لكن الجرة التي تم اختيارها من بين الاثنين كانت دائمًا متسقة ، فإن البناء من آلة واحدة ستعمل دائمًا ولن يحدث أحد الآلة الأخرى.

شكرا لمساعدتك.

هل كانت مفيدة؟

المحلول

الحرب هي ببساطة ملف مضغوط. وعلى هذا النحو يمكن أن يحتوي على ملفين لهما نفس الاسم. حتى أنه يقول ذلك في دليل النمل:

يرجى ملاحظة أن تنسيق الرمز البريدي يسمح بوجود ملفات متعددة من نفس الاسم المؤهل بالكامل داخل أرشيف واحد.

لا تستخدم ANT دليلًا مؤقتًا لبناء الحرب. كل شيء يتم في الذاكرة.

نظرًا لأنه لا يمكن وجود ملفين في Windows بنفس الاسم ، يتم تجاهل أحدهما أثناء الاستخراج. لست متأكدًا من الشخص الذي يتم تجاهله ، لكن تخميني سيكون أن أول ما تمت إضافته هو الوحيدة المستخرجة.

لتجنب هذا النوع من الخطأ ، تحتاج إلى استبعاد أحد الملفات على وجه التحديد:

<war destfile="myapp.war" webxml="src/metadata/myapp.xml">
  <lib dir="libs">
    <exclude name="projectA.jar"/>
  </lib>
  <lib dir="projectAlibs"/>
...
</war>

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top