如何明确地调用maven插件而不是以其他方式运行?

Pav*_*sov 2 java maven-plugin pom.xml maven-3 maven

最后我生成一些带有explicite的Java代码,mvn generate-sources它调用了定义的CXF插件pom.xml.

问:如何配置插件以使其在显式调用时运行而不是以其他方式运行?

如果我设置phasegenerate-sources,然后mvn generate-sources工作,但mvn compile也触发它(这是不必要的).

如果我设置phasenone,则不mvn generate-sources执行任何操作(不需要),但mvn compile不会触发它(确定).

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>${cxf.version}</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <!--<phase>none</phase>-->
Run Code Online (Sandbox Code Playgroud)

A_D*_*teo 10

您可以从命令行运行任何插件,因此专门用它(在这种情况下不是Maven阶段的一部分),只需在POM(插件部分)中使用通用配置(不嵌套在任何执行子系统中)配置插件部分).

因此,给定的配置将用于任何执行.由于相关插件没有任何默认绑定通过任何Maven 包装(而是发生在其他插件中,即Maven编译器或Surefire插件),因此只能通过命令行执行来获取配置.

mvn org.apache.cxf:cxf-codegen-plugin:wsdl2java 
Run Code Online (Sandbox Code Playgroud)

然后运行您使用POM中给出的所需配置配置的插件:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>${cxf.version}</version>
    <configuration><!-- HERE YOUR CONFIG --></configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

如您所见,没有为插件描述执行(因此没有阶段),但提供了全局配置.作为全局,它也将由命令行执行使用.

这种方法与您尝试的方法略有不同:

mvn generate-sources
Run Code Online (Sandbox Code Playgroud)

执行时generate-sources,您正在执行阶段,因此执行任何其他前一阶段.但是,前面的阶段不会影响您的项目,因此您将获得相同的行为,以及将其作为compile阶段的一部分的副作用.


如果您真的希望将它作为generate-sources阶段的一部分(无论出于何种原因)并继续运行mvn generate-sources而没有上述的副作用,那么您可以将其包装在配置文件中,添加到您的POM中:

<profiles>
   <profile>
      <id>generate-cxf</id>
      <build>
         <defaultGoal>generate-sources</defaultGoal>
         <plugins>
           <plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <version>${cxf.version}</version>
                <executions><!-- HERE YOUR EXECUTIONS--></executions>
            </plugin>
         </plugins>
      </build>
     </profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)

然后你可以执行:

mvn generate-sources -Pgenerate-cxf
Run Code Online (Sandbox Code Playgroud)

它将激活上面的配置文件,因此您的插件和执行但不会影响(副作用)任何其他阶段或默认构建.

而且,通过defaultGoal 元素配置,您甚至可以简单地调用:

mvn -Pgenerate-cxf
Run Code Online (Sandbox Code Playgroud)

你会有完全相同的行为(虽然我会说有点神秘).


最后但并非最不重要的是,从Maven 3.3.1开始,您可以从命令行none(指定所需的执行ID)调用一个简单的插件执行(保持绑定到此阶段),如下所示:

    mvn org.apache.cxf:cxf-codegen-plugin:VERSION_HERE:wsdl2java:@EXEC_ID_HERE
Run Code Online (Sandbox Code Playgroud)

上面的命令只会(并且只)执行您的目标执行.