怎么编译两次?

时间:2012-08-08 10:32:30

标签: java maven

我有一个网络服务项目:

  • src/main/precode中,我手动编写Java类,并使用cxf-java2ws-plugin插件生成WSDL文件。
  • src/main/java中,我有使用cxf-codegen-plugin插件从WSDL生成的最终类。

问题是,为了生成WSDL,似乎cxf-java2ws-plugin需要编译类,所以我必须在编译阶段之后执行插件。所以,我还需要在编译阶段后执行cxf-codegen-plugin,因为它需要另一个插件生成的WSDL文件。 但是,为了编译我的SEI(即在编译阶段之前),我需要cxf-codegen-plugin生成的类,所以我被卡住了。

我已经考虑过将其分成两个项目,但我正在寻找一个项目解决方案。我认为,如果有可能编译两次,它将解决问题。

由于

2 个答案:

答案 0 :(得分:0)

每次执行插件时,都按照声明的顺序添加到phase

pluginA:exectionA:compile
pluginC:exectionA:compile
pluginB:exectionA:compile

生成compile,其默认定义为<sourceDirectory></sourceDirectory> (src/main/java ),加上执行A, C and B

只需在声明maven-compiler-plugin插件(也绑定到{{1}之后“<configuration>compile添加cxf-java2ws-plugin的执行即可。 }})。

compile中将目录添加到:

pom.xml

您还可以配置<sourceDirectory></sourceDirectory> Element : sourceDirectory 3.0.0+ This element specifies a directory containing the source of the project. The generated build system will compile the source in this directory when the project is built. The path given is relative to the project descriptor.`

答案 1 :(得分:0)

我对cxf maven插件了解不多,因此获取正确配置的插件执行的输入和输出目录取决于您。话虽如此,这就是我如何尝试这种方式(未经测试!)。

  • 向编译器插件配置添加执行以运行compile目标。将此执行绑定到generate-sources阶段(因为缺少更好的东西)。执行ID应该类似&#34; precode-compile&#34;。使用<includes>参数进行编译目标,将/src/main/precode目录指定为输入。
  • 使用上一步中生成的类作为输入,将cxf-java2ws-plugin配置为在process-sources阶段运行。
  • cxf-codegen-plugin配置为在process-sources阶段运行,并将WSDL指定为输入。确保在java2ws插件配置之后有这个配置,因为绑定到同一阶段的目标按照它们在POM中定义的顺序运行。

如果我正确理解您的用例,我认为默认的编译目标(执行ID&#34;默认编译&#34;)绑定现在可以正常。如果我不太了解,至少你有想法尝试的想法。

如果您不确定如何为单个插件配置多个执行,请查看Maven docs