Как получить доступ к плагину в дочернем модуле maven из родительского модуля

#maven #fabric8-maven-plugin

#maven #fabric8-maven-plugin

Вопрос:

У меня есть многомодульная настройка maven, которая включает плагин fabric8 в профиль, определенный в дочернем модуле, для создания образа Docker, если профиль активен, см. Ниже

Корневой пом

 <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.mycompany</groupId>
    <artifactId>root</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>control</name>
    <packaging>pom</packaging>

    <modules>
        <module>parent</module>
        <module>docker</module>
        <module>...</module>
        <module>...</module>
        <module>...</module>
    </modules>
</project>
  

Дочерний pom

 <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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>docker</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <profiles>
        <profile>
            <id>Docker</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>io.fabric8</groupId>
                        <artifactId>docker-maven-plugin</artifactId>
                        <version>0.34.1</version>
                        <dependencies>
                            <dependency>
                                <groupId>com.amazonaws</groupId>
                                <artifactId>aws-java-sdk-core</artifactId>
                                <version>${aws.version}</version>
                            </dependency>
                        </dependencies>
                        <configuration>
                            <registry>${aws.ecr.registry}</registry>
                            <images>
                                <image>
                                    <name>${aws.ecr.registry}/${aws.ecr.repository}:${project.artifactId}-${project.version}</name>
                                    <build>
                                        <contextDir>${project.build.directory}/docker.tmp/</contextDir>
                                    </build>
                                </image>
                            </images>
                        </configuration>
                        <executions>
                            <execution>
                                <id>docker-build</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>build</goal>
                                </goals>
                            </execution>
                            <execution>
                                <id>docker-push</id>
                                <phase>install</phase>
                                <goals>
                                    <goal>push</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
  

Запуск обычной сборки, т. Е. mvn clean install -PDocker завершается успешно, но если я вызываю одну из целей docker напрямую из родительского модуля, например mvn -PDocker docker:help , он завершается с этой ошибкой

 No plugin found for prefix 'docker' in the current project and in the plugin groups 
  

Выполнение той же команды из каталога docker завершается успешно.

Какие изменения необходимы, чтобы команда успешно завершилась в корневом каталоге?

Комментарии:

1. Вы можете использовать приведенные ниже команды с вашего родительского уровня pom mvn -pl <name_of_child_module_containing_dockerfile> docker:build для создания образа docker и mvn -pl <name_of_child_module_containing_dockerfile> docker:push его отправки. Поскольку ваш pom chil содержит <artifactId>docker</artifactId> , поэтому с вашего родительского уровня pom вы можете запустить mvn -pl docker docker:build и mvn -pl docker docker:push