Java 如何在Maven中跳过生成源代码

Java 如何在Maven中跳过生成源代码,java,maven,build,Java,Maven,Build,在Maven中有没有跳过生成源代码的方法 通过命令行选项执行此操作,我有一个场景,在这个场景中,每当WSDL或WADL发生更改时,我都会生成CXF类。因此,无论何时需要,我都会显式地生成它。因此,我创建了一个单独的配置文件,一个新的配置文件cxf gen,以及我常用的开发、uat和syst。它有生成类的插件。简而言之,每当我需要重新生成类时,我就会切换到概要文件并运行generate sources。这是我使用的示例配置文件 <profiles> <profile>

在Maven中有没有跳过生成源代码的方法


通过命令行选项执行此操作,我有一个场景,在这个场景中,每当WSDL或WADL发生更改时,我都会生成CXF类。因此,无论何时需要,我都会显式地生成它。因此,我创建了一个单独的配置文件,一个新的配置文件cxf gen,以及我常用的开发、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>

发展
真的
发展
uat
uat
jaxB-gen
发展
org.codehaus.mojo
jaxb2 maven插件
1.5
org.apache.cxf
cxf-wadl2java-plugin
2.7.6
生成源
生成源

这是一个老生常谈的问题,尽管有些答案可能会起作用,但没有一个是理想的

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

我假设GenerateSources阶段绑定到一个插件目标

答案是创建一个名为“clean build”的配置文件,默认情况下该配置文件处于活动状态,并包含插件绑定。当开发人员信任他们可以安全地跳过生成源时,他们可以运行以下命令

mvn -P !clean-build <goal>
mvn-P!干净利落
或者如果感叹号需要转义

mvn -P \!clean-build <goal>
mvn-P\!干净利落
下面是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+。

如果您使用的是
Maven源插件(适用于Maven 3.6.0):

-Dmaven.source.skip=true

为什么要这样做?这一阶段有什么关系?显示您的pom文件?我不想重新生成源代码,因为文件中没有架构更改。这只是一个示例,您可以使用类似的机制…好的,您可以通过一个配置文件进行生成,将其放入名为“gen schema”的配置文件中,然后将生成的源代码放入版本控制。如果需要更改架构,只需激活配置文件。将生成的代码提交到版本控制是一个坏主意,因为它可能与架构不同步。这几乎是一个好答案。问题是它应该默认生成源代码,而不是按需生成。否则,默认情况下将破坏原始的干净构建(mvn编译)。好的文档可以解决这个问题,但最好在POM中解决。答案与问题相匹配:“有没有办法在Maven中跳过生成源代码?通过命令行选项来实现?”。默认情况下,它是跳过的,当您想通过命令行执行此操作时,您可以执行类似“mvnjaxb2:xjc-pjaxbgen”@Tristan插件中有一个字段,您可以将其设置为${cxf.skip},然后从命令行传递-Dcxf.skip=true