تفعيل ملفات تعريف Maven المختلفة اعتمادًا على الوحدة النمطية الحالية؟

StackOverflow https://stackoverflow.com/questions/1018720

  •  06-07-2019
  •  | 
  •  

سؤال

لدينا بناء متعدد الوحدات مع وحدات باستخدام تقنيات مختلفة ، مثل Java و Flex. هل من الممكن بطريقة ما تنشيط ملفات تعريف مختلفة بناءً على الوحدة النمطية التي يتم تجميعها حاليًا؟

جربته بتفعيل مثل

<profile>
  <id>flex</id>
  <activation>
    <file>
      <exists>${basedir}/src/main/flex</exists>
    </file>
  </activation>
  ...
</profile

لكنه لم ينجح ، على الرغم من أن استخدام $ {inriveir} موثق في وثائق Maven (هذا خطأ في Maven). هل هناك إمكانية مختلفة لتنشيطات مختلفة بناءً على الوحدة النمطية الحالية؟ أم أن Maven يسمح فقط بتنشيط ملف تعريف لجميع الوحدات النمطية أم لا على الإطلاق؟

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

المحلول

بالنسبة لأولئك مثلي يقرأون هذا السؤال يبحثون عن إجابات ، تعمل حالة الاستخدام هذه الآن في Maven 3.

كان هناك خطأ يؤثر على هذه الميزة في الإصدارات المبكرة من 3 (انظر http://jira.codehaus.org/browse/mng-2363) لكنه يعمل بالنسبة لي بشكل صحيح باستخدام Maven 3.0.4.

نصائح أخرى

بعد المزيد من الأبحاث ، توصلت أخيرًا إلى استنتاج مفاده أن هذا غير ممكن لسببين في إصدار Maven الحالي (2.1.0):

  • لم يتم مورث ملفات تعريف Maven ، لذلك لا يمكنك تحديد ملف تعريف في POM الوالدين وتنشيط ذلك في بوم الطفل.
  • لم أجد إمكانية لتفعيل ملف تعريف من بوم نفسه. لا يعمل التنشيط مع $ {inrivalir} واستجابة تنشيط الخصائص فقط لإعدادات النظام ، والتي يتم تحديدها عالميًا من خلال خيار -D.

في 2.2.1 ، يتم توريث الملفات الشخصية ولكن قضية $ {referier} لا تزال موجودة. أنا في نفس القارب - أحتاج إلى تنشيط ملف تعريف بناءً على وجود ملف في مشروع معين. يقوم طفلي ببناء بشكل فردي على ما يرام (ملف تعريف موروثة يتم تنشيطه بواسطة وجود الملفات المحلية) ، ولكن إذا قمت بتشغيل البناء من الوالد العلوي ، فإنهم يفشلون لأنه لم يتم العثور على الملف.

فيما يتعلق بالتنشيط المستند إلى الملف ، يمكنك محاولة إزالة $ {inriveir}. نستخدمه مثل هذا:

<activation>
   <file>
      <missing>target/jboss/conf/jboss-service.xml</missing>
   </file>
</activation>

لا أعرف ما إذا كان هذا يساعد ، لكنني حلت مشكلة مماثلة في النهج التالي:

  1. لقد قمت بإنشاء ووصفت الملف الشخصي في POM POM ، الذي لديه activeByDefault=false. ثم يحتوي قسم الإدارة الإضافية على تكوينات الإضافات المختلفة.
  2. يمكن للأطفال إعادة استخدام هذا الملف الشخصي ، وتعيين activeByDefault=trueهذا يجعل ملف التعريف نشطًا ، ولكن لا يزال يتم تنشيط أي من الإضافات.
  3. ولكن لحسن الحظ تتوفر تكوينات البرنامج المساعد الموصوفة. يمكنك إعادة استخدامها في الأطفال من خلال تعريفهم في قسم الإضافات. أنت فقط توفر المجموعة- و Artifactid ، وتعيين inherited=true لكل مكون إضافي تريد إعادة استخدامه في الأطفال.

أتمنى أن يساعد ذلك. آسف لعدم تضمين أي قصاصات رمز ، لكنني آمل أن تكون Soutions مفهومة.

يمكنك تعيين خاصية في كل وحدة تريد استخدام ملف التعريف ، ثم استخدام تنشيط "خاصية" في ملفات التعريف الخاصة بك.

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