Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在maven中清理包期间保护自动生成的源?_Java_Maven_Cxf_Xjc - Fatal编程技术网

Java 如何在maven中清理包期间保护自动生成的源?

Java 如何在maven中清理包期间保护自动生成的源?,java,maven,cxf,xjc,Java,Maven,Cxf,Xjc,我有一个maven配置文件,它触发xsd和wsdl类的自动生成,如下所示: <plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-xjc-plugin</artifactId> <version>${cxf-xjc-plugin}</version> <executions

我有一个maven配置文件,它触发xsd和wsdl类的自动生成,如下所示:

    <plugin>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-xjc-plugin</artifactId>
        <version>${cxf-xjc-plugin}</version>
        <executions>
            <execution>
                <id>generate-sources</id>
                <phase>generate-sources</phase>

                <configuration>
                    <sourceRoot>${project.build.directory}/generated/src/main/java</sourceRoot>
                    <xsdOptions>
                        //xsds, wsdls etc
                    </xsdOptions>
                </configuration>
                <goals>
                    <goal>xsdtojava</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
生成的类转到:target/generated/src/main/java


问题:运行“mvn clean package”将始终删除这些类。我怎样才能预防它?除了生成的/one之外,是否可以使用clean删除目标目录的全部内容?

使用maven clean插件可以不删除某些目录,但这绝对不是一个好主意:

这违反了Maven的惯例 它迫使您在每次希望生成这些类时都更改POM 不推荐您的确切问题的解决方案 您可以使用和参数排除带有maven clean插件的目录:

maven清洁插件 2.6.1 符合事实的 ${project.build.directory} 产生/* 请注意,我强烈建议您不要使用此解决方案

提议的解决办法 您的实际问题不是每次构建时都重新生成类,因为这需要很多时间。然后,目标是避免使用自定义配置文件生成:

不产生 没有一个 生成 符合事实的 生成源 使用以下插件定义:

org.apache.cxf cxf xjc插件 ${cxf xjc插件} 生成源 ${xjc.generate} ${project.build.directory}/generated/src/main/java //xsds、wsdls等 xsdtojava 似乎cxf xjc插件没有任何skip参数,因此当我们想要避免执行时,必须将阶段设置为none。这是一个未记录的功能,但它可以工作

诀窍是定义两个配置文件:一个在默认情况下激活,设置一个属性告诉cxf xjc插件在generate soures阶段执行,而另一个设置一个属性告诉cxf xjc插件不执行

因此,当您希望生成类时,可以使用mvn clean install调用Maven;当您希望不生成类时,可以使用mvn clean install-PnoGenerate调用Maven


这里真正的好处是,您不需要每次决定生成或不生成类时都更改POM。

使用maven clean插件可以不删除某些目录,但这绝对不是一个好主意:

这违反了Maven的惯例 它迫使您在每次希望生成这些类时都更改POM 不推荐您的确切问题的解决方案 您可以使用和参数排除带有maven clean插件的目录:

maven清洁插件 2.6.1 符合事实的 ${project.build.directory} 产生/* 请注意,我强烈建议您不要使用此解决方案

提议的解决办法 您的实际问题不是每次构建时都重新生成类,因为这需要很多时间。然后,目标是避免使用自定义配置文件生成:

不产生 没有一个 生成 符合事实的 生成源 使用以下插件定义:

org.apache.cxf cxf xjc插件 ${cxf xjc插件} 生成源 ${xjc.generate} ${project.build.directory}/generated/src/main/java //xsds、wsdls等 xsdtojava 似乎cxf xjc插件没有任何skip参数,因此当我们想要避免执行时,必须将阶段设置为none。这是一个未记录的功能,但它可以工作

诀窍是定义两个配置文件:一个在默认情况下激活,设置一个属性告诉cxf xjc插件在generate soures阶段执行,而另一个设置一个属性告诉cxf xjc插件不执行

因此,当您希望生成类时,可以使用mvn clean install调用Maven;当您希望不生成类时,可以使用mvn clean install-PnoGenerate调用Maven


这里真正的好处是,您不需要每次决定生成或不生成类时都更改POM。

我有另一种方法

首先,将xjc插件配置为不擦除任何文件,例如:

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.2</version>
<executions>
    <execution>
        <goals>
            <goal>xjc</goal>
        </goals>
    </execution>
</executions>
<configuration>
    <clearOutputDir>false</clearOutputDir>
    <outputDirectory>${project.build.directory}</outputDirectory>
    <sources>
        <source>  [any xsd] </source>
    </sources>
</configuration>
第二,使用maven clean插件在清理阶段清理jxc类生成的目录:
这对我很有用。

我会有另一种方法

首先,将xjc插件配置为不擦除任何文件,例如:

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.2</version>
<executions>
    <execution>
        <goals>
            <goal>xjc</goal>
        </goals>
    </execution>
</executions>
<configuration>
    <clearOutputDir>false</clearOutputDir>
    <outputDirectory>${project.build.directory}</outputDirectory>
    <sources>
        <source>  [any xsd] </source>
    </sources>
</configuration>
第二,使用maven clean插件在清理阶段清理jxc类生成的目录:

<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
<configuration>
    <filesets>
        <fileset>
            <directory>${basedir}/generated/src/main/java/...where the generated classes are</directory>
            <includes>
                <include>**/*.java</include>
            </includes>
            <followSymlinks>false</followSymlinks>
        </fileset>
    </filesets>
</configuration>

这对我很有用。

为什么要这样做?clean删除目标目录,Maven生成的所有内容都应该放在这个目录下,所以所有内容都应该这样做。这些类将在下一次构建时重新生成。是的,但是-作为write-我想阻止重新生成。我有一些很大的wsdl文件,而重新生成需要很长时间。尽管如此,在移动或重命名包时,最终war包需要mvn清理,否则目标可能包含旧编译类。另一种情况是升级jar依赖项,删除旧的依赖项。在所有这些情况下,不重新生成wsdl java类将节省几分钟,因为它们不是必需的。因此,您真正的问题不是如何使maven clean插件不删除生成/而是如何避免重新生成。这不是同一个问题。例如,这可以通过使用配置文件来实现。你能相应地更新这个问题吗?如果在清理过程中无法保护文件夹,那么是的,这将是我的问题。在一次突击中。干得好你为什么要这样做?clean删除目标目录,Maven生成的所有内容都应该放在这个目录下,所以所有内容都应该这样做。这些类将在下一次构建时重新生成。是的,但是-作为write-我想阻止重新生成。我有一些很大的wsdl文件,而重新生成需要很长时间。尽管如此,在移动或重命名包时,最终war包需要mvn清理,否则目标可能包含旧编译类。另一种情况是升级jar依赖项,删除旧的依赖项。在所有这些情况下,不重新生成wsdl java类将节省几分钟,因为它们不是必需的。因此,您真正的问题不是如何使maven clean插件不删除生成/而是如何避免重新生成。这不是同一个问题。例如,这可以通过使用配置文件来实现。你能相应地更新这个问题吗?如果在清理过程中无法保护文件夹,那么是的,这将是我的问题。在一次突击中。干得好使用ExcludeDefaultDirectory,是否可以使用mvn gnerate源来触发显式重新生成?@membersound mvn generate sources始终将执行generate sources阶段,以便生成类。clean未使用mvn generate-sources调用。使用ExcludeDefaultDirectory,是否可以使用mvn gnerate源触发显式重新生成?@membersound mvn generate源始终将执行生成源阶段,以便生成类。不使用mvn生成源调用clean。