相同的插件具有不同的配置

时间:2017-08-02 13:07:45

标签: maven maven-plugin exec-maven-plugin

我正在使用Maven 3.3.9。 是否可以针对具有不同配置的相同插件实现相同的目标? 我的意思是这样的

<build>
    ...
    <pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.6.0</version>
            <executions>
              <execution>
                <id>test1</id>
                <goals>
                  <goal>exec</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
                <executable>dir</executable>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.6.0</version>
            <executions>
              <execution>
                <id>test2</id>
                <goals>
                  <goal>exec</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
                <executable>cd</executable>
            </configuration>
        </plugin>
    </plugins>
    </pluginManagement>
</build>

如果我将<configuration>标记放在<execution>内,则会被忽略。

另外标签<goalPrefix>无效,所以我不知道如何将目标别名化以区分它们......

修改

我需要执行两个不同的脚本,但只是作为cli目标......脚本对代码运行一些测试,但测试是可选的,只有在程序员明确要运行时才需要执行它们。

我想在maven中嵌入这些脚本的原因是因为我想使用${project.build.directory}变量

1 个答案:

答案 0 :(得分:3)

是的,确实如此。但是,您通常会将它们全部包含在同一个插件定义中。我们这样做是为了使树摇动,提前在我们的项目中编译和缩小angular2 UI。我们的配置如下所示:

            <plugins>
                <plugin>
                    <groupId>com.github.eirslett</groupId>
                    <artifactId>frontend-maven-plugin</artifactId>
                    <version>1.0</version>
                    <executions>
                        <execution>
                            <id>npm run typescript compiler</id>
                            <phase>compile</phase>
                            <goals>
                                <goal>npm</goal>
                            </goals>
                            <configuration>
                                <arguments>run compile_ts_ngc</arguments>
                            </configuration>
                        </execution>

                        <execution>
                            <id>rollup</id>
                            <phase>compile</phase>
                            <goals>
                                <goal>npm</goal>
                            </goals>
                            <configuration>
                                <arguments>run rollup</arguments>
                            </configuration>
                        </execution>

                        <execution>
                            <id>gulp build</id>
                            <phase>compile</phase>
                            <goals>
                                <goal>gulp</goal>
                            </goals>
                            <configuration>
                                <arguments>aot</arguments>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>

如您所见,我们在编译阶段运行两个不同的npm命令。它们按照从上到下指定的顺序运行。

我不完全确定你要与他们做些什么来区分他们?这是为了订购目的还是一些条件执行?通常我们会将需要在特定条件下运行的单独任务放入配置文件中,以便您可以轻松指定何时运行它们。