قم بتنشيط المكون الإضافي الرئيسي تلقائيًا في Maven

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

  •  20-08-2019
  •  | 
  •  

سؤال

هل من الممكن أن يكون لديك مكون إضافي محدد في POM الأصلي والذي تم إلغاء تنشيطه، وعندما يرث الطفل هذا المكون الإضافي يتم تنشيطه تلقائيًا؟

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

المحلول

واعتقد انك تريد تكوين المساعد في بوم والديك، ولكن استخدامه فقط في المشاريع الموروثة. مخضرم فرعا لهذا - تكوين الإضافات الخاصة بك في pluginManagement، ولكن تربطها مرحلة فقط عند الحاجة إليها، على سبيل المثال حذف علامة المرحلة في pluginManagement، ولكن تحديد ذلك تحت فيكم ورثت بوم.

نصائح أخرى

وهكذا "siddhadev 'هو الصحيح تماما. يمكنك تحديد التكوين المساعد في بوم الأم مع معرف معين:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>child-caller</id>
                        <!-- 'phase' omitted -->
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <echo message="called from child!" />
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

و، في الطفل بوم، يمكنك سرد صراحة المرحلة حيث ينبغي أن يسمى هذا:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <id>child-caller</id>
                    <phase>compile</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

ولقد استعملت هذه لاستهداف JREs مختلف. للأسف، لأنه لا يمكن استخدام مخضرم مترجم البرنامج المساعد مع الدلائل وجهة مختلفة (والذي أعتبره خطأ في البرنامج المساعد)، يجب استخدام النملة.

وهذا ليس بالضبط ما كنت بعد، ولكن أعتقد أنه سوف يعمل جيدا بما فيه الكفاية بالنسبة لك.

إذا قمت بتعريف البرنامج المساعد في علامة pluginManagement في الأصل، سوف تكون موروثة التكوين عن طريق أي مشاريع طفل أن تعلن أن البرنامج المساعد.

وعلى سبيل المثال، في الأصل تعلن أن البرنامج المساعد الترجمة يستخدم جافا 5 لتجميع الاختبار.

<pluginManagement>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <executions>
        <execution>
          <id>test-compile</id>
          <goals>
            <goal>testCompile</goal>
          </goals>
          <configuration>
            <source>1.5</source>
            <target>1.5</target>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</pluginManagement>

وبعد ذلك في الطفل، تقوم بتعريف بسيط البرنامج المساعد مترجم والتكوين من الوالد سوف تكون موروثة:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
    </plugin>
  </plugins>
</build>

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

والرئيسي بوم، وتعطيل البرنامج المساعد، ولكن يعلن عن التكوين:

<plugin>
    <groupid>org.apache.maven.plugins</groupid>
    <artifactid>maven-surefire-plugin</artifactid>
    <configuration>
        <skip>true</skip>
        ...lots more config...
        ...lots more config...
        ...lots more config...
    </configuration>
</plugin>

والطفل بوم، مما يتيح البرنامج المساعد:

<plugin>
    <groupid>org.apache.maven.plugins</groupid>
    <artifactid>maven-surefire-plugin</artifactid>
    <configuration>
        <skip>false</skip>
    </configuration>
</plugin>

ذهبت مع الحل التالي:

  • قم بتكوين البرنامج المساعد في الأصل في قسم pluginManagement.ربط البرنامج المساعد بمرحلة موجودة.

  • قم بإلغاء تنشيط المكون الإضافي لـparent-pom عن طريق ربطه بمرحلة غير موجودة:تجاوز المرحلة في قسم الإضافات.

  • قم بتنشيط المكون الإضافي في كل طفل من خلال تضمين المكون الإضافي في قسم المكونات الإضافية.

مثال الوالدين:

<defaultGoal>install</defaultGoal>
    <pluginManagement>
        <plugins>
            ...
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <executions>
                    <execution>
                        <id>install-ejb-client</id>
                        <phase>install</phase>
                        <goals>
                        <goal>install-file</goal>
                        </goals>
                        <configuration>
                            <file>${ejb-client-file}</file>
                            <groupId>${project.groupId}</groupId>
                            <artifactId>${project.artifactId}</artifactId>
                            <version>${project.version}</version>
                            <packaging>jar</packaging>
                            <classifier>client</classifier>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
                    ...                 
        </plugins>
    </pluginManagement>
    <plugins>
            <plugin>
                <!-- deactivate the plugin for this project, only child-projects do generate ejb-clients -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <inherited>false</inherited>
                <executions>
                    <execution>
                        <id>install-ejb-client</id>
                        <phase>none</phase>
                    </execution>
                </executions>
            </plugin>
            ...
    </plugins>
</build>

مثال الطفل بوم:

<build>
    <plugins>
            ...
        <plugin>
            <!-- Install the generated client-jar. Property 'ejb-client-file' has to be set! Plugin configuration is in the parent pom -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
        </plugin>       
            ... 
    </plugins>
</build>

وبقدر ما أعرف، لا يوجد حل عام لهذا الغرض. على الأقل في الوقت الراهن ...

وفكرة واحدة (لم أحاول ذلك، ولكنها قد تعمل) هو تحديد، في pom.xml الأم هدفا التنفيذ التي لا وجود لها، على سبيل المثال:

<executions>
    <execution>
        <goals>
            <goal>noGoal</goal>
        </goals>
    </execution>
</executions>

ووفي كل طفل، يمكنك إعادة تعريف الهدف الصحيح.

ومشكلة هذا الحل (إذا كان يعمل، وبطبيعة الحال،)) هي التي يجب إعادة تكوين البرنامج المساعد لكل طفل. خلاف ذلك، لن يتم تنفيذه.

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