Maven copy resources为profile once默认值执行两次一次

Maven copy resources为profile once默认值执行两次一次,maven,maven-profiles,maven-resources-plugin,Maven,Maven Profiles,Maven Resources Plugin,我有一个maven项目,其中我定义了一个基于配置文件的构建,包括一个自定义maven资源插件配置 ... <profiles> <profile> <id>docker</id> <build> <plugins> <plugin> <groupId>org.apac

我有一个maven项目,其中我定义了一个基于
配置文件的构建,包括一个自定义
maven资源插件
配置

...
<profiles>
    <profile>
        <id>docker</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.1.0</version>
                    <executions>
                        <execution>
                            <id>resources</id>
                            <phase>generate-resources</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>${basedir}/target/classes</outputDirectory>
                                <resources>
                                    <resource>
                                        <directory>${basedir}/src/main/resources</directory>
                                        <filtering>false</filtering>
                                        <excludes>
                                            <exclude>log4j2*.xml</exclude>
                                            <exclude>docker/*</exclude>
                                        </excludes>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>
...
。。。
码头工人
org.apache.maven.plugins
maven资源插件
3.1.0
资源
产生资源
复制资源
${basedir}/target/classes
${basedir}/src/main/resources
假的
log4j2*.xml
码头工人/*
...
现在,当我执行例如
mvn compile-p docker
时,我可以看到资源插件执行了两次

信息]---maven资源插件:3.1.0:复制资源(资源)@mma访问管理授权服务器---

[信息]使用“UTF-8”编码复制筛选的资源

[信息]正在复制2个资源

[信息]---maven资源插件:3.1.0:资源(默认资源)@mma访问管理授权服务器---

[信息]使用“UTF-8”编码复制筛选的资源

[信息]正在复制5个资源


是这样吗?我真的必须排除默认构建的所有资源,以避免通过默认资源再次复制它们吗?

不要再次将插件绑定到生成资源阶段。 仅使用配置标记时,可以更改默认执行的配置

...
<profiles>
    <profile>
        <id>docker</id>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.1.0</version>
                    <configuration>
                        <resources>
                            <resource>
                                <directory>${basedir}/src/main/resources</directory>
                                <filtering>false</filtering>
                                <excludes>
                                    <exclude>log4j2*.xml</exclude>
                                    <exclude>docker/*</exclude>
                                </excludes>
                            </resource>
                        </resources>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>
...
。。。
码头工人
maven资源插件
3.1.0
${basedir}/src/main/resources
假的
log4j2*.xml
码头工人/*
...

当我没有将其绑定到某个阶段/目标时,插件不会执行?是的,当您没有在配置文件中绑定它时,插件只会在配置文件中指定的配置下执行一次。谢谢,它可以工作。我忽略了将配置放在执行部分之外,这有点像。插件可以在生命周期中运行多次,甚至在同一阶段。提示将是您给出的执行id:resources-如果您想要替换默认值,您需要使用相同的执行id-如果您想要将配置放置在执行块中。如果存在不同的插件,则插件将在每次配置的执行中运行。