Автоматически активируйте родительский плагин в Знатоке

Как оказалось, это была проблема с пространством имен. Это был рефакторированный репозиторий, и в его верхней части было:

using System.Data.Entity;

С этим пространством имен оператор .Include был скомпилирован правильно, но EFCore не улавливал отношения. Добавьте:

using Microsoft.EntityFrameworkCore;

и вдруг SQL правильно генерирует соединения для активных нагрузок.

9
задан Sled 8 August 2013 в 15:11
поделиться

6 ответов

Я предполагаю, что Вы хотите настроить плагин в своем родительском англичанине, но использовать его только в наследованных проектах. У знатока есть раздел для этого - настраивают Ваши плагины в pluginManagement, но связывают их с фазой как раз в то самое время, когда Вам был нужен он, например, опустите тег фазы в pluginManagement, но укажите его под в Вас наследованный англичанин.

10
ответ дан 4 December 2019 в 06:49
поделиться

Можно объявить плагин в высокоуровневом англичанине и сказать ему быть пропущенным и затем сказать ему не быть пропущенным на дочернем уровне. Это не совсем автоматически, но очень минимально в многословии переопределения.

Породите Англичанина, отключив плагин, но объявив всю конфигурацию:

<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>
4
ответ дан 4 December 2019 в 06:49
поделиться

Насколько я знаю, нет никакого универсального решения для этого. По крайней мере в настоящий момент...

Одна идея (я не попробовал его, но это может работать), должен определить, в родительском pom.xml цель выполнения, которая не существует, например:

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

и в каждом ребенке, Вы переопределяете корректную цель.

Проблема этого решения (если это работает, конечно, ;)) состоит в том, что необходимо переопределить сменную конфигурацию для каждого ребенка. Иначе это не будет выполняться.

1
ответ дан 4 December 2019 в 06:49
поделиться

Это не совсем то, что вам нужно, но я думаю, что это подойдет вам.

Если вы объявите плагин в теге pluginManagement в родительском теге, конфигурация будет унаследована любыми дочерними проектами которые объявляют этот подключаемый модуль.

Например, в родительском объекте объявляется, что подключаемый модуль компиляции использует Java 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>
6
ответ дан 4 December 2019 в 06:49
поделиться

Итак, «сиддхадев» в точности правильный. Вы можете определить конфигурацию плагина в родительском pom с заданным идентификатором:

<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>

И в дочернем POM вы можете явно указать этап, на котором он должен быть вызван:

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

Я использовал это для нацеливания на различные JRE. К сожалению, поскольку вы не можете использовать maven-compiler-plugin с разными целевыми каталогами (что я считаю ошибкой в ​​плагине), вы должны использовать Ant.

9
ответ дан 4 December 2019 в 06:49
поделиться

Я выбрал следующее решение:

  • Настройте плагин в родительском pom в разделе pluginManagement. Привязать плагин к существующей фазе.

  • Деактивировать плагин для родительского pom, привязав его к несуществующей фазе: переопределить фазу в разделе plugins-section.

  • Активировать плагин в каждом дочернем pom, включая плагин в разделе плагинов.

Пример 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>

Пример child-pom:

<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>
4
ответ дан 4 December 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: