【问题标题】:Maven plugin multiple executions don't inject variables when executing plugin alone单独执行插件时,Maven插件多次执行不注入变量
【发布时间】:2013-07-17 18:07:09
【问题描述】:

我写了一个我在一些项目中使用的 maven 插件。在第一个项目中,它只有一次执行,我可以直接使用

执行插件
mvn com.mycompany:my-plugin:0.0.1-SNAPSHOT:do-stuff

在第二个项目中,插件有多次执行,当我尝试上面的命令时,我最终崩溃了,因为插件尝试使用空参数执行。

请注意,在这两种情况下,插件在作为流程资源阶段的一部分执行时都可以正常工作。只有当我尝试只执行插件目标时它才会失败。有人可以帮我理解为什么第二个示例尝试使用空白参数执行吗?

第一个项目(一次执行 - 工作正常):

        <plugin>
            <groupId>com.mycompany</groupId>
            <artifactId>my-plugin</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <configuration>
                <sourceFiles>
                    <sourceFile>loadfile</sourceFile>
                </sourceFiles>
                <outputFile>outputFile</outputFile>
            </configuration>
            <executions>
                <execution>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>do-stuff</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

第二个项目(多次执行 - 不成功):

<plugin>
        <groupId>com.my-company</groupId>
        <artifactId>my-plugin</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <executions>
            <execution>
                <id>default</id>
                <phase>process-resources</phase>
                <configuration>
                    <sourceFiles>
                        <sourceFile>file1</sourceFile>
                    </sourceFiles>
                    <outputFile>outputFile</outputFile>
                </configuration>
                <goals>
                    <goal>do-stuff</goal>
                </goals>
            </execution>
            <execution>
                <id>novice</id>
                <phase>process-resources</phase>
                <configuration>
                    <sourceFiles>
                        <sourceFile>file1</sourceFile>
                        <sourceFile>file2</sourceFile>
                    </sourceFiles>
                    <outputFile>outputFile</outputFile>
                </configuration>
                <goals>
                    <goal>do-stuff</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

【问题讨论】:

    标签: maven maven-plugin


    【解决方案1】:

    在第二个示例中,您拥有的唯一配置位于 executions 中。执行绑定之外没有 configuration 块,因此直接调用插件目标自然不会接收任何参数(因为当前的 configuration 块是特定于绑定的)。

    解决方案是使用“默认”configuration 块(如您的第一个示例)+ execution 特定配置,或从命令行提供 configuration 参数(如果适用)。

    最后一点 - 并非有意侮辱,每个程序员有时都会错过简单的解决方案 - 因为它是 您的 插件,您只需更改配置规范即可在一个 @ 中定义您需要的所有内容987654328@ 块:)。鉴于唯一的原因似乎是您对m2e 的具体问题,我认为您不必这样做,但它肯定是摆在桌面上的一个选项。

    【讨论】:

    • 有没有办法让它完成所有的执行,而不是运行整个目标阶段?
    • 小挑剔,“目标”是你的插件定义的,“阶段”是目标的执行所绑定的。不幸的是,我不知道这样的解决方案,除了调用mvn 两次的shell 脚本之外,命令行中的目标和不同的配置参数。但是你的问题引发了一个危险信号:你确定你没有尝试将 Maven 用于它不打算用于的东西吗?这里的场景是什么?
    • 感谢您的澄清。我们有一个在流程资源阶段执行的插件来准备额外的资源。这在 CLI 中很好,但该插件尚不支持 M2E,因此我们希望能够进行仅运行所有插件执行的 eclipse 启动。我发现我可以为 mvn process-resources 创建一个启动并且工作正常,但我仍然很好奇是否有一种方法可以只执行所有插件执行(不是我们在 process-resources 中做任何其他事情)。
    • 啊,m2e 生命周期映射问题,我多么喜欢它们……答案to this question 在这种情况下应该对您有所帮助。此外,直接调用 Maven 运行配置也应该可以正常工作,只有在调用“Eclipse-specific”Build 时才会看到问题。
    • TYVM,我去看看。
    猜你喜欢
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 2011-09-16
    • 2011-12-23
    • 2018-10-17
    • 2021-05-01
    相关资源
    最近更新 更多