本文介紹了如何在Maven中清潔封裝時保護自動生成的源碼?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我有一個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 PACKET’將始終刪除這些類。我怎么才能防止它呢?是否可以讓clean
刪除target
目錄中除generated/
目錄之外的全部內容?
推薦答案
可以不使用maven-clean-plugin
刪除某些目錄,但這絕對不是一個好主意:
這違反了Maven的慣例
每次希望生成這些類時,它都會強制您更改POM
您確切問題的解決方案(不推薦)
您可以使用excludeDefaultDirectories
和filesets
參數排除maven-clean-plugin
目錄:
<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。
這篇關于如何在Maven中清潔封裝時保護自動生成的源碼?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,