单独执行插件时,Maven插件多次执行不会注入变量

时间:2013-07-17 18:07:09

标签: maven maven-plugin

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

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

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

请注意,在这两种情况下,插件在作为process-resources阶段的一部分执行时工作正常。它只在我尝试执行插件目标时失败。有人可以帮我理解为什么第二个例子试图用空白参数执行吗?

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

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

1 个答案:

答案 0 :(得分:1)

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

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

作为最后一点 - 并且不打算侮辱,每个程序员有时会错过简单的解决方案 - 因为它是你的插件,你可以改变配置规范,让你在一个中定义你需要的一切{ {1}}阻止:)。我不认为你应该这样做,因为唯一的原因似乎是configuration的特定问题,但它肯定是桌面上的一个选项。