هل هناك طريقة لتحميل ملف الخصائص ديناميكيًا في NAnt؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

أريد تحميل ملف خصائص مختلف بناءً على متغير واحد.

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

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

المحلول

الخطوة 1:حدد خاصية في برنامج NAnt النصي الخاص بك لتتبع البيئة التي تقوم ببنائها (المحلية، والاختبارية، والإنتاجية، وما إلى ذلك).

<property name="environment" value="local" />

الخطوة 2:إذا لم يكن لديك بالفعل هدف تكوين أو تهيئة تعتمد عليه جميع الأهداف، فقم بإنشاء هدف تكوين، وتأكد من أن أهدافك الأخرى تعتمد عليه.

<target name="config">
    <!-- configuration logic goes here -->
</target>

<target name="buildmyproject" depends="config">
    <!-- this target builds your project, but runs the config target first -->
</target>

الخطوه 3:قم بتحديث هدف التكوين الخاص بك لسحب ملف خصائص مناسب استنادًا إلى خاصية البيئة.

<target name="config">
    <property name="configFile" value="${environment}.config.xml" />
    <if test="${file::exists(configFile)}">
        <echo message="Loading ${configFile}..." />
        <include buildfile="${configFile}" />
    </if>
    <if test="${not file::exists(configFile) and environment != 'local'}">
        <fail message="Configuration file '${configFile}' could not be found." />
    </if>
</target>

لاحظ أنني أرغب في السماح لأعضاء الفريق بتحديد ملفات local.config.xml الخاصة بهم والتي لا تلتزم بالتحكم بالمصادر.يوفر هذا مكانًا رائعًا لتخزين سلاسل الاتصال المحلية أو إعدادات البيئة المحلية الأخرى.

الخطوة 4:قم بتعيين خاصية البيئة عند استدعاء NAnt، على سبيل المثال:

  • nant -D:environment=dev
  • nant -D:environment=test
  • نانت -D: البيئة = الإنتاج

نصائح أخرى

يمكنك استخدام ال include مهمة تضمين ملف بناء آخر (يحتوي على خصائصك) داخل ملف البناء الرئيسي.ال if سمة من include يمكن اختبار المهمة مقابل متغير لتحديد ما إذا كان يجب تضمين ملف البناء:

<include buildfile="devPropertyFile.build" if="${buildEnvironment == 'DEV'}"/>
<include buildfile="testPropertyFile.build" if="${buildEnvironment == 'TEST'}"/>
<include buildfile="prodPropertyFile.build" if="${buildEnvironment == 'PROD'}"/>

واجهت مشكلة مماثلة والتي تم حلها جزئيًا بواسطة إجابة scott.caligan، لكنني أردت أن يتمكن الأشخاص من ضبط البيئة وتحميل ملف الخصائص المناسب فقط عن طريق تحديد هدف مثل هذا:

  • نانت ديف
  • اختبار نانت
  • مرحلة نانت

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

<target name="dev">
  <property name="environment" value="dev"/>
  <call target="importProperties" cascade="false"/>
</target>

<target name="test">
  <property name="environment" value="test"/>
  <call target="importProperties" cascade="false"/>
</target>

<target name="stage">
  <property name="environment" value="stage"/>
  <call target="importProperties" cascade="false"/>
</target>

<target name="importProperties">
  <property name="propertiesFile" value="properties.${environment}.build"/>
  <if test="${file::exists(propertiesFile)}">
    <include buildfile="${propertiesFile}"/>
  </if>
  <if test="${not file::exists(propertiesFile)}">
    <fail message="Properties file ${propertiesFile} could not be found."/>
  </if>
</target>

الطريقة التي قمت بها بهذا النوع من الأشياء هي تضمين ملفات بناء منفصلة اعتمادًا على نوع البناء باستخدام ملف مهمة نانت.قد يكون البديل المحتمل هو استخدام مهمة iniread في nantcontrib.

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