我有一个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删除target目录中除generated/目录之外的全部内容?
发布于 2015-09-25 14:12:37
不使用maven-clean-plugin删除某些目录是可能的,但这绝对不是一个好主意:
解决你的确切问题(不推荐)
可以使用maven-clean-plugin和excludeDefaultDirectories参数排除具有filesets的目录:
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>2.6.1</version>
<configuration>
<excludeDefaultDirectories>true</excludeDefaultDirectories>
<filesets>
<fileset>
<directory>${project.build.directory}</directory>
<excludes>
<exclude>generated/*</exclude>
</excludes>
</fileset>
</filesets>
</configuration>
</plugin>请注意,我强烈建议您使用此解决方案,而不是而不是。
拟议解决方案
您的实际问题不是每次构建时都重新生成类,因为这需要大量时间。因此,目标是通过使用自定义配置文件来避免生成:
<profiles>
<profile>
<id>noGenerate</id>
<properties>
<xjc.generate>none</xjc.generate>
</properties>
</profile>
<profile>
<id>generate</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<xjc.generate>generate-sources</xjc.generate>
</properties>
</profile>
</profiles>具有以下插件定义:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-xjc-plugin</artifactId>
<version>${cxf-xjc-plugin}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>${xjc.generate}</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>cxf-xjc-plugin似乎没有任何skip参数,所以当我们想要避免执行时,我们不得不将phase设置为none (这是一个无文档化的特性,但它有效)。
诀窍是定义两个概要文件:一个是默认激活的,它设置一个属性,告诉cxf-xjc-plugin在generate-soures阶段执行,另一个设置一个属性,告诉cxf-xjc-plugin不要执行。
因此,当您想要生成类时,可以使用mvn clean install调用Maven,当您希望不生成类时,可以使用mvn clean install -PnoGenerate调用Maven。
这里真正的好处和优势是,每次决定生成或不生成类时,都不需要更改POM。
发布于 2017-03-13 15:17:42
我会有另一种方法。
1)将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>
2)使用maven-洁净插件来清除清洁阶段生成的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>
这对我是有用的,我希望是有用的。
https://stackoverflow.com/questions/32783735
复制相似问题