Pav*_*sov 2 java maven-plugin pom.xml maven-3 maven
最后我生成一些带有explicite的Java代码,mvn generate-sources它调用了定义的CXF插件pom.xml.
问:如何配置插件以使其在显式调用时运行而不是以其他方式运行?
如果我设置phase到generate-sources,然后mvn generate-sources工作,但mvn compile也触发它(这是不必要的).
如果我设置phase为none,则不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)
上面的命令只会(并且只)执行您的目标执行.
| 归档时间: |
|
| 查看次数: |
2788 次 |
| 最近记录: |