2014-03-04 57 views
2

是否有方法可以跳过Maven中的生成源?如何跳过Maven中的生成源

通过命令行选项

+0

为什么你想这样做?这个阶段有什么约束?显示你的pom文件? – khmarbaise

+0

我不想重新创建源文件,因为文件中没有模式更改 – kuhajeyan

+0

只是一个示例,您可以使用类似的机制... –

回答

4

我已经场景,我产生CXF类时曾经我有在WSDL或WADL变化这样做。因此,我会在需要时明确生成它。因此,我创建了一个独立的配置文件一个新的配置文件cxf-gen以及我通常的dev,uat,syst。它有插件来生成类。总之,当我需要重新生成类时,我切换到配置文件并运行generate-sources。这里是我使用的样本配置文件。

<profiles> 
    <profile> 
     <id>dev</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <envName>dev</envName> 
     </properties> 
    </profile> 
    <profile> 
     <id>uat</id> 
     <properties> 
      <envName>uat</envName> 
     </properties> 
    </profile> 

    <profile> 
     <id>jaxB-gen</id> 
     <properties> 
      <envName>dev</envName> 
     </properties> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>jaxb2-maven-plugin</artifactId> 
        <version>1.5</version> 
        <configuration> 
         <!-- CONFIGS -> 
        </configuration> 
        <executions> 
         <execution> 
          <id>xjc</id> 
          <goals> 
           <goal>xjc</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
    <profile> 
     <id>code-gen</id> 
     <properties> 
      <envName>dev</envName> 
     </properties> 
     <build> 
      <plugins> 
       <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> 
          <configuration> 
           <!-- CONFIGS -> 
          </configuration> 
          <goals> 
           <goal>wsdl2java</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 

       <!-- wadl2java Required only when JAXRS classes are to be generated --> 
       <plugin> 
        <groupId>org.apache.cxf</groupId> 
        <artifactId>cxf-wadl2java-plugin</artifactId> 
        <version>2.7.6</version> 
        <executions> 
         <execution> 
          <id>generate-sources</id> 
          <phase>generate-sources</phase> 
          <configuration> 
           <!-- CONFIGS -> 
          </configuration> 
          <goals> 
           <goal>wadl2java</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 

       <plugin> 
        <groupId>com.googlecode.jsonschema2pojo</groupId> 
        <artifactId>jsonschema2pojo-maven-plugin</artifactId> 
        <version>0.3.7</version> 
        <configuration> 
         <!-- CONFIGS -> 
        </configuration> 
        <executions> 
         <execution> 
          <goals> 
           <goal>generate</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 

      </plugins> 
     </build> 
    </profile> 
</profiles> 
+0

这几乎是一个很好的答案。问题是它应该默认生成源代码,而不是按需生成。否则,一个天真的清洁构建(mvn编译)将被打破默认。好的文档可以解决这个问题,但更好的解决它在POM中。 – marcv81

+0

答案虽然符合问题:“有没有办法在Maven中跳过生成源代码?通过命令行选项执行它”。默认情况下它会被跳过,当你想通过命令行来做时,你可以像“mvn jaxb2:xjc -P jaxB-gen” – Tristan

+0

@Tristan那样在插件中有一个字段,你可以将它设置为 $ {cxf .skip}然后从命令行中可以传递-Dcxf.skip = true –

1

这是一个古老的问题,虽然有些答案会以某种方式工作,但都不是理想的。

这个答案并不打破干净的构建:调用“mvn <目标>”仍然产生预期的和向后兼容的结果,这对于持续集成是有利的。此外,这个答案不依赖于将生成的代码提交到版本控制,这是一个坏主意,因为它可能会与源不同步。

我假设生成源阶段绑定到插件目标。

答案是创建一个名为“clean-build”的配置文件,默认情况下它是活动的并包含您的插件绑定。当开发人员相信他们可以安全地跳过生成源时,他们可能会运行以下操作。

mvn -P !clean-build <goal> 

或者如果感叹号需要转义。

mvn -P \!clean-build <goal> 

这是pom.xml的样子。

<profiles> 
    <profile> 
    <id>clean-build</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
    <build> 
     <plugins> 
     <plugin> 
      ... 
      <executions> 
      <execution> 
       ... 
       <phase>generate-sources</phase> 
       ... 
      </execution> 
      </executions> 
      ... 
     </plugin> 
     </plugins> 
    </build> 
    </profile> 
</profiles> 

此答案需要Maven 2.0.10+。