English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

ملف تكوين بناء Maven

ملف تكوين البناء هو سلسلة من قيم الخيارات التي يمكن استخدامها لتعيين أو تغيير القيم الافتراضية لبناء Maven.

باستخدام ملف تكوين البناء، يمكنك تخصيص طريقة البناء للبيئات المختلفة مثل بيئة الإنتاج (Production) وبيئة التطوير (Development).

ملف الإعدادات يستخدم في ملف pom.xml باستخدام عناصر activeProfiles أو profiles ويتم تفعيله عبر طرق متعددة. يتم تعديل ملف الإعدادات في بناء POM ويستخدم لتعيين مختلف البيئات الهدف للمعلمات (مثل، بيئة التطوير (Development)، اختبار (Testing) وبيئة الإنتاج (Production) وعنوان خادم قاعدة البيانات).

أنواع ملف تكوين البناء

يكون نوع ملف تكوين البناء تقريباً من ثلاثة أنواع:

النوعأين يتم تعريفه
مشروع (Per Project)تم تعريفه في ملف POM للمشروع pom.xml
مستخدم (Per User)تم تعريفه في ملف إعدادات Maven xml (%USER_HOME%/.m2/settings.xml)
عالمي (Global)تم تعريفه في ملف إعدادات Maven العالمية xml (%M2_HOME%/conf/settings.xml)

تفعيل ملف التكوين

يمكن تفعيل ملف تكوين بناء Maven بطرق متعددة.

  • باستخدام إدخال أوامر في وحدة التحكم بالأوامر بشكل واضح.

  • باستخدام إعدادات Maven.

  • باستخدام متغيرات البيئة (متغيرات المستخدم أو النظام).

  • إعدادات نظام التشغيل (مثل، سلسلة Windows).

  • وجود أو عدم وجود ملف.

مثال على تفعيل ملف التكوين

نفترض بنية المشروع كالت:

في دليل src/main/resources هناك ثلاثة ملفات تستخدم للاختبار:

اسم الملفالوصف
env.propertiesإعدادات التكوين الافتراضية عند عدم تحديد ملف تكوين.
env.test.propertiesإعدادات التكوين عند استخدام ملف تكوين الاختبار.
env.prod.propertiesإعدادات التكوين عند استخدام ملف تكوين الإنتاج.

ملاحظة:هذه الثلاثة ملفات التكوين ليست لتقديم وظيفة ملف تكوين البناء، بل لغرض هذا الاختبار؛ على سبيل المثال، إذا كنت قد قمت بتحديد ملف تكوين البناء كـ prod، فإن المشروع سيستخدم ملف env.prod.properties.

ملاحظة:المثال التالي يستخدم ما زال plug-in AntRun، لأن هذا plug-in يمكنه ربط مراحل حياة Maven، وإذا لم يكن هناك أي رمز مكتوب باستخدام علامات Ant يمكنه إخراج معلومات وإعادة توزيع الملفات، وما إلى ذلك. الباقي ليس له علاقة بملف تكوين البناء هذا.

1- تفعيل ملف التكوين

سيناريو يمكننا من تحديد مجموعة من معلومات التكوين، ثم تحديد شرط التفعيل. بهذا يمكننا تحديد عدة سيناريوهات، وكل سيناريو يتوافق مع شرط تفعيله ومعلومات التكوين، مما يحقق تأثير استخدام معلومات تكوين مختلفة في بيئات مختلفة.

في هذا المثال، سنضيف هدف maven-antrun-plugin:run إلى مرحلة الاختبار. بهذا يمكننا إخراج معلومات نصية في مختلف السيناريوهات. سنستخدم pom.xml لتحديد سيناريوهات مختلفة، ونستخدم أوامر Maven في حاسوب التحكم للتفعيل سيناريو.

ملف pom.xml كالت:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.jsoft.test</groupId>
  <artifactId>testproject</artifactId>
  <packaging>jar</packaging>
  <version>0.1-SNAPSHOT</version>
  <name>testproject</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <profiles>
      <profile>
          <id>test</id>
          <build>
              <plugins>
                 <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>1.8</version>
                    <executions>
                       <execution>
                          <phase>test</phase>
                          </goals>
                             <goal>run</goal>
                          </goals>
                          <configuration>
                          <tasks>
                             <echo>Using env.test.properties</echo>
                             <copy file="src/main/resources/env.test.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/>
                          </tasks>
                          </configuration>
                       </execution>
                    </executions>
                 </plugin>
              </plugins>
          </build>
      </profile>
      <profile>
          <id>normal</id>
          <build>
              <plugins>
                 <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>1.8</version>
                    <executions>
                       <execution>
                          <phase>test</phase>
                          </goals>
                             <goal>run</goal>
                          </goals>
                          <configuration>
                          <tasks>
                             <echo>استخدام env.properties</echo>
                             <copy file="src/main/resources/env.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/>
                          </tasks>
                          </configuration>
                       </execution>
                    </executions>
                 </plugin>
              </plugins>
          </build>
      </profile>
      <profile>
          <id>prod</id>
          <build>
              <plugins>
                 <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>1.8</version>
                    <executions>
                       <execution>
                          <phase>test</phase>
                          </goals>
                             <goal>run</goal>
                          </goals>
                          <configuration>
                          <tasks>
                             <echo>استخدام env.prod.properties</echo>
                             <copy file="src/main/resources/env.prod.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/>
                          </tasks>
                          </configuration>
                       </execution>
                    </executions>
                 </plugin>
              </plugins>
          </build>
      </profile>
   </profiles>
</project>

ملاحظة:ملف تكوين البناءيُستخدم <profiles> النقاط.

ملاحظة:تم إنشاء ثلاثة <profiles>، حيث <id>  تم التمييز بين <profiles> لتنفيذ مهام AntRun المختلفة؛ بينما يمكن فهم مهام AntRun بأنها تشاهد مرحلة حياة Maven test، وعندما يتم تنفيذ test بواسطة Maven، يتم إرسال مهام AntRun، ويتم فيها إدخال النصوص وإعادة تكرار الملفات إلى المواقع المحددة؛ وبالنسبة للمهمة التي يتم تنفيذها من AntRun، في هذه اللحظةملف تكوين البناءيؤدي إلى نقل المعلمات المحددة، مثل إدخال المعلمات المحددة عبر معامل الأوامر <id>.

إجراء الأمر:

mvn test -Ptest

إشارة: الأول test هو مرحلة حياة Maven، والثاني test هوملف تكوين البناءالمعلمات المحددة <id>، هذه المعلمات يتم نقلها من خلال -P، بالطبع، يمكن أن تكون prod أو normal وما إلى ذلك، التي تحددها أنت<id>.

نتائج التنفيذ كالتالي:

يظهر أن مهمة AntRun تم تنشيطها بنجاح. وهي تتوافق معملف تكوين البناءالمهمة التي تحتوي على <id> test.

واختبار الأمرين الآخرين، النتائج كالتالي:

2- من خلال إعداد Maven لتفعيل ملف التكوين

فتح %USER_HOME%/.m2 في مجلد settings.xml ملف، حيث %USER_HOME% مثل دليل المستخدم الرئيسي. إذا لم يكن ملف setting.xml موجودًا، يتم نسخه مباشرة %M2_HOME%/conf/settings.xml إلى مجلد .m2، حيث %M2_HOME% مثل دليل تثبيت Maven.

تأكد من تعديل ملف setting.xml، وإضافة خاصية <activeProfiles>:

<settings xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/settings-1.0.0.xsd">
   ...
   <activeProfiles>
      <activeProfile>test</activeProfile>
   </activeProfiles>
</settings>

إجراء الأمر:

mvn test

الإشارة 1:لا تحتاج إلى استخدام -Ptest لتحديد المعلمات الآن، <activeprofile> في ملف setting.xml المحدد بالفعل test كمعلمات بديلة.

الإشارة 2:يمكن استخدامها أيضًا في %M2_HOME%/conf/settings.xml لفائف التكوين، النتيجة متشابهة.

نتيجة التنفيذ:

3-تفعيل ملف التكوين عبر متغيرات البيئة

أولاً، قم بإزالة جميع القيم من setting.xml التي تم اختبارها في الخطوة السابقة.

ثم في نقطة <id> التي لها <profile> test في pom.xml، أضف نقطة <activation>:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.jsoft.test</groupId>
  <artifactId>testproject</artifactId>
  <packaging>jar</packaging>
  <version>0.1-SNAPSHOT</version>
  <name>testproject</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <profiles>
      <profile>
          <id>test</id>
          <activation>
            <property>
               <name>env</name>
               <value>test</value>
            </property>
          </activation>
          <build>
              <plugins>
                 <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>1.8</version>
                    <executions>
                       <execution>
                          <phase>test</phase>
                          </goals>
                             <goal>run</goal>
                          </goals>
                          <configuration>
                          <tasks>
                             <echo>Using env.test.properties</echo>
                             <copy file="src/main/resources/env.test.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/>
                          </tasks>
                          </configuration>
                       </execution>
                    </executions>
                 </plugin>
              </plugins>
          </build>
      </profile>
      <profile>
          <id>normal</id>
          <build>
              <plugins>
                 <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>1.8</version>
                    <executions>
                       <execution>
                          <phase>test</phase>
                          </goals>
                             <goal>run</goal>
                          </goals>
                          <configuration>
                          <tasks>
                             <echo>استخدام env.properties</echo>
                             <copy file="src/main/resources/env.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/>
                          </tasks>
                          </configuration>
                       </execution>
                    </executions>
                 </plugin>
              </plugins>
          </build>
      </profile>
      <profile>
          <id>prod</id>
          <build>
              <plugins>
                 <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>1.8</version>
                    <executions>
                       <execution>
                          <phase>test</phase>
                          </goals>
                             <goal>run</goal>
                          </goals>
                          <configuration>
                          <tasks>
                             <echo>استخدام env.prod.properties</echo>
                             <copy file="src/main/resources/env.prod.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/>
                          </tasks>
                          </configuration>
                       </execution>
                    </executions>
                 </plugin>
              </plugins>
          </build>
      </profile>
   </profiles>
</project>

إجراء الأمر:

mvn test -Denv=test

الإشارة 1:تم استخدام -D لتمرير متغيرات البيئة فيما فوق، حيث evn يعني القيمة التي تم إعدادها سابقًا <name>، و test يعني <value>.

الإشارة 2:تم اختبار متغيرات بيئة النظام على Windows 10، ولكن لم يكن له تأثير، لذا، يمكن فقط تمريره من خلال -D.

نتيجة التنفيذ:

4. تفعيل ملف التكوين عبر نظام التشغيل

يحتوي عنصر activation على المعلومات التالية عن نظام التشغيل. سيتم تفعيل Profile test عند وجود نظام التشغيل Windows XP.

<profile>
   <id>test</id>
   <activation>
      <os>
         <name>Windows XP</name>
         <family>Windows</family>
         <arch>x86</arch>
         <version>5.1.2600</version>
      </os>
   </activation>
</profile>

الآن افتح وحدة التحكم بالأوامر، انتقل إلى مجلد pom.xml، وأecute الأمر التالي. لا تستخدم خيار -P لتحديد اسم Profile. سيعرض Maven نتائج Profile test المفعلة.

mvn test

5. تفعيل ملف التكوين عند وجود أو فقدانه

الآن استخدم عنصر activation لتشمل المعلومات التالية عن نظام التشغيل. سيتم تفعيل Profile test عند فقدان target/generated-sources/axistools/wsdl2java/com/companyname/group.

<profile>
   <id>test</id>
   <activation>
      <file>
         <missing>target/generated-sources/axistools/wsdl2java/
         com/companyname/group</missing>
      </file>
   </activation>
</profile>

الآن افتح وحدة التحكم بالأوامر، انتقل إلى مجلد pom.xml، وأecute الأمر التالي. لا تستخدم خيار -P لتحديد اسم Profile. سيعرض Maven نتائج Profile test المفعلة.

mvn test

مراجعة: https://www.cnblogs.com/EasonJim/p/6828743.html