简体   繁体   English

maven-jaxb2-plugin forceRegenerate = false不工作?

[英]maven-jaxb2-plugin forceRegenerate=false not working?

I'm trying to configure maven-jaxb2-plugin to only generate java if XSD changes. 我正在尝试将maven-jaxb2-plugin配置为仅在XSD更改时生成java。 That doesn't seem to work because java classes are always regenerated. 这似乎不起作用,因为java类总是被重新生成。 This is the plugin configuration : 这是插件配置:

<plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <version>0.8.3</version>
            <configuration>
                <generateDirectory>${basedir}/src/main/java/</generateDirectory>
                <strict>true</strict>
                <verbose>true</verbose>
                <readOnly>true</readOnly>
                <episode>true</episode>
                <forceRegenerate>false</forceRegenerate>  
                <removeOldOutput>false</removeOldOutput>
            </configuration>
            <executions>
                <execution>
                    <id>commun-generate</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <generatePackage>my.package.dest</generatePackage>
                        <schemaDirectory>${basedir}/src/main/resources/schemas/wsrest</schemaDirectory>
                        <bindingDirectory>${basedir}/src/main/resources/schemas/wsrest</bindingDirectory>
                        <bindingIncludes>
                            <include>bindings.xml</include>
                        </bindingIncludes>
                        <episodeFile>${basedir}/src/main/java/META-INF/sun-jaxb_commun.episode</episodeFile>
                    </configuration>
                </execution>

When building (maven clean install or maven install) i can observe this output : 在构建(maven clean install或maven install)时,我可以观察到这个输出:

[INFO] File [D:\IDE\Data\Eclipse\workspace\MyProject\src\main\resources\schemas\wsrest\myXSD.xsd] was changed since the last build.
[INFO] File [D:\IDE\Data\Eclipse\workspace\MyProject\src\main\resources\schemas\wsrest\bindings.xml] was changed since the last build. 
[INFO] File [D:\IDE\Data\Eclipse\workspace\MyProject\pom.xml] was changed since the last build.

But i didn't change anything in theses files since the last build! 但是自上次构建以来,我没有更改这些文件中的任何内容!

What am i doing wrong? 我究竟做错了什么?

Thanks in advance 提前致谢

Clément 克莱门特

As a partial workaround you can add <noFileHeader>true</noFileHeader> to your configuration so that generated sources are the same for unchanged XSD. 作为部分解决方法,您可以将<noFileHeader>true</noFileHeader>到配置中,以便生成的源对于未更改的XSD是相同的。 Solves my problems with repository commits, if that matters to you as well... 解决我的存储库提交问题,如果这对你也很重要......

Can't stop XJC from re-generation it checks just timestamps it seems. 无法阻止XJC重新生成它只检查时间戳。

There's no way to stop regenerate because of the following: I'd the same issue and I dug through the plugin code to find out the root cause: 由于以下原因,无法停止重新生成:我遇到了同样的问题,我通过插件代码查找根本原因:

The up-to-date check in org.jvnet.jaxb2.maven2.RawXJC2Mojo.isUpToDate uses if (getBuildContext().hasDelta(dependsFile)) which delegates to org.sonatype.plexus.build.incremental.DefaultBuildContext.hasDelta which is hard-coded to return true. org.jvnet.jaxb2.maven2.RawXJC2Mojo.isUpToDate的最新检查使用if (getBuildContext().hasDelta(dependsFile))委托给org.sonatype.plexus.build.incremental.DefaultBuildContext.hasDelta这很难-coded返回true。 This is because the concept of incremental build is broken in Maven cf Incremental Build 这是因为增量构建的概念在Maven cf Incremental Build中被打破

That logic can be changed to check if the output directory exists and if yes, if the XSD have changed. 可以更改该逻辑以检查输出目录是否存在,如果是,则更改XSD。 I may file a bug if I find time. 如果我找时间,我可能会提出错误。

Are the files actually regenerated? 文件是否实际重新生成? I have the following: 我有以下内容:

[INFO] File [C:\Projects\workspace-juno\maven-jaxb2-plugin-project\tests\po\src\main\resources\purchaseorder.xsd] was changed since the last build.
[INFO] File [C:\Projects\workspace-juno\maven-jaxb2-plugin-project\tests\po\pom.xml] was changed since the last build.
[INFO] Checking up-to-date depends [[C:\Projects\workspace-juno\maven-jaxb2-plugin-project\tests\po\src\main\resources\purchaseorder.xsd, C:\Projects\workspace-juno\maven-jaxb2-plugin-project\tests\po\pom.xml]].
[INFO] Checking up-to-date produces [[C:\Projects\workspace-juno\maven-jaxb2-plugin-project\tests\po\target\generated-sources\xjc\generated\Items.java, C:\Projects\workspace-juno\maven-jaxb2-plugin-project\tests\po\target\generated-sources\xjc\generated\ObjectFactory.java, C:\Projects\workspace-juno\maven-jaxb2-plugin-project\tests\po\target\generated-sources\xjc\generated\PurchaseOrderType.java, C:\Projects\workspace-juno\maven-jaxb2-plugin-project\tests\po\target\generated-sources\xjc\generated\USAddress.java, C:\Projects\workspace-juno\maven-jaxb2-plugin-project\tests\po\target\generated-sources\xjc\META-INF\sun-jaxb.episode]].
[INFO] Depends timestamp [1.395.259.386.093], produces timestamp [1.395.259.394.765].
[INFO] Skipped XJC execution. Generated sources were up-to-date.

It seems that the provided org.sonatype.plexus.build.incremental.BuildContext says that the file has changed. 似乎提供的org.sonatype.plexus.build.incremental.BuildContext表示文件已更改。 But when the plugin checks the timestamps specifically, it sees that files are up-to-date. 但是当插件专门检查时间戳时,它会发现文件是最新的。 I think the problem is just in the log message, it should read may have been changed . 我认为问题只是在日志消息中,它应该读取may have been changed

Please file an issue here . 在这里提出问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM