运行 配置文件中插件的目标

Run a goal of a plugin inside a profile

    <profile>
        <id>integration-tests</id>
        <activation>
            <property>
                <name>integrations</name>
                <value>true</value>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.4.0</version>
                    <executions>
                        <execution>
                            <id>script-chmod</id>
                            <phase>integration-test</phase>
                            <goals>
                                <goal>exec</goal>
                            </goals>
                            <configuration>
                                <executable>chmod</executable>
                                <arguments>
                                    <argument>+x</argument>
                                    <argument>integration-test-docker/integrations.sh</argument>
                                </arguments>
                            </configuration>
                        </execution>
                        <execution>
                            <id>script-exec</id>
                            <phase>integration-test</phase>
                            <goals>
                                <goal>exec</goal>
                            </goals>
                            <configuration>
                                <executable>integration-test-docker/integrations.sh</executable>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

此配置文件包含更多内容,但我只包含了我想要的内容 运行。我怎样才能执行这个特定插件的这个特定目标?

我试过 mvn exec:exec 但我明白了

[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.3.2:exec (default-cli) on project ando: The parameters 'executable' for goal org.codehaus.mojo:exec-maven-plugin:1.3.2:exec are missing or invalid -> [Help 1]

此外,错误输出指示版本 1.3.2,但我使用的是 1.4.0

你在调用 exec-maven-pluginexec 目标时出错,因为它的配置(你指的那个)是 profile 的一部分,默认情况下是不活动的它不会被你的执行激活 mvn exec:exec.

如果您尝试通过 属性 激活(根据配置)或显式(通过 -P 选项)来激活配置文件,那么 Maven 将知道您提到的是哪个 Exec Maven 插件:

mvn exec:exec -Pintegration-tests

mvn exec:exec -Dintegrations=true

因此,配置文件将处于活动状态,您的 Exec Maven 插件配置将成为构建的一部分。

但是,您正在配置插件的两次执行,并且没有全局配置,因此它也会再次失败。

execution sub-section中或sub-section之外的plugin部分的configuration元素之间有一个:out,它将是默认应用于所有执行和命令行执行;中,它将应用于所应用的特定执行(覆盖或与任何默认执行合并,如果提供)。

如果你想运行两次执行,你可以只激活配置文件:

mvn clean verify -Pintegration-tests

mvn clean verify -Dintegrations=true

但是,它将执行配置文件的全部内容加上整个构建,直到指定的 phase

如果你只想从命令行执行插件目标(exec),那么你需要指定一个默认配置(但只有一个)如下:

<profile>
    <id>integration-tests</id>
    <activation>
        <property>
            <name>integrations</name>
            <value>true</value>
        </property>
    </activation>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.4.0</version>
                <configuration>
                    <!-- here your default configuration -->
                </configuration>
            </plugin>
        </plugins>
    </build>
</profile>

默认配置将应用于命令行执行。

或者,您也可以覆盖 (default-cli),它被命令行中的每个插件执行所使用,您可以将其视为问题中提到的错误的一部分。因此,您可以只为该执行提供特定配置,而不为所有其他(如果有)执行提供特定配置(假设它们不会提供自己的配置)。这是一个例子:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.4.0</version>
    <executions>
        <execution>
            <id>default-cli</id>
            <configuration>
                <!-- here your specific command line execution -->
            </configuration>
        </execution>
    </executions>
</plugin>

如果你想从命令行执行这两个执行并且只执行这些执行(因此,不是 Maven 阶段的一部分),你可以检查 这个主题(简而言之:这是可能的,因为Maven 3.3.1, 否则为较早版本提供建议)。

因此,执行如下:

mvn org.codehaus.mojo:exec-maven-plugin:1.4.0:exec@script-chmod -Dintegrations=true

注:

  • 我再次激活配置文件以将执行作为构建的一部分
  • 这次我没有传递插件 exec 和期望的目标 exec,而是它的完整 Maven GAV(groupId、artifactId、版本)在依赖项的常见 Maven 模式(: 分隔),所以我们得到 org.codehaus.mojo:exec-maven-plugin:1.4.0,然后通过目标,所以我们得到额外的 :exec,然后使用上面提到的新功能和新的@ 运算符我传递所需的执行 ID(在 POM 中定义)。