让maven jaxb2插件在没有ForceRegenate的情况下正常工作的java问题
我正在调试一个使用“org.jvnet.jaxb2.maven2:maven-jaxb2-plugin”(当前版本为0.13.3)从模式生成JAXB类的服务
此服务当前正在其生成中将“forceRegenerate”设置为true。构建是从命令行运行的,但是当我们打开这个项目时,我们在Eclipse中看到了奇怪的行为
我注意到https://github.com/highsource/maven-jaxb2-plugin/wiki/Do-Not-Use-forceRegenerate,它明确表示不要使用设置为true的“forceregenate”
所以,我一直试图在不将该属性设置为true的情况下使其工作。我发现在执行“mvn清理包”时会出现编译错误
在pom中,有十几个这样的执行块:
<execution>
<id>icad</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<forceRegenerate>true</forceRegenerate>
<specVersion>2.2</specVersion>
<schemaDirectory>src/main/resources/schemas/csi_CustomerCareProfile</schemaDirectory>
<schemaIncludes>
<include>*.wsdl</include>
</schemaIncludes>
<clearOutputDir>false</clearOutputDir>
<generateDirectory>target/generated-sources/jaxb</generateDirectory>
<xjbsources>
<xjbsource>bindings.xjb</xjbsource>
</xjbsources>
</configuration>
</execution>
当我运行它时,我会在“generateDirectory”中找到所有预期的包和生成的源。如果我做了一次“清理”,然后再次运行,它会正确地重新生成它们
但是,如果我注释掉该属性设置,然后完全删除“target”目录,然后运行“mvn package”并查看mvn输出,我会看到一些奇怪的东西。它表明:
[INFO] --- maven-jaxb2-plugin:0.13.3:generate (icad) @ UnifiedAccountMs ---
[INFO] Latest timestamp of the source resources is [2021-05-11 11:01:57.462], earliest timestamp of the target resources is [2021-05-11 11:02:35.762].
[INFO] Sources are up-to-date, XJC will be skipped.
结果,生成得到编译错误。这是因为这些执行元素中的每一个都使用相同的“generateDirectory”值。所以,我的下一步是完成所有这些,并为该值添加一个独特的结尾。一个合理的约定是简单地将某人设置的“id”值作为附加子目录添加
我使用以下内容作为指导:How can I tell jaxb / Maven to generate multiple schema packages?
这看起来很有希望。我看着建筑经过,我看到它每一个都在再生。然而,当它进入编译步骤时,它失败了,出现了“重复类”错误。我查看了GeneratedSources树,发现同一个完全限定类肯定有多次出现,现在出现在不同的子目录中。这以前没有发生过,因为它总是写在同一棵树上
在每个执行中,正在处理的模式集都有一个导入的“CommonDataModel.xsd”,但每个执行都指向具有不同CommonDataModel的模式目录。xsd文件,但每个文件中都有一些常见类型
好的,现在我尝试添加在执行中唯一的“generatePackage”值(当我第一次使generateDirectory值唯一时我没有这样做),只需使用一个公共前缀并将“id”值添加到它的末尾
这样,我会出现如下错误:
[ERROR] Error while generating code.Location [ file:.../UpdateAccountRequest.xsd{29,49}].
com.sun.istack.SAXParseException2: Two declarations cause a collision in the ObjectFactory class.
at com.sun.tools.xjc.ErrorReceiver.error (ErrorReceiver.java:86)
...
[ERROR] Error while generating code.Location [ file:.../UpdateAccountResponse.xsd{18,50}].
com.sun.istack.SAXParseException2: (Related to above error) This is the other declaration.
at com.sun.tools.xjc.ErrorReceiver.error (ErrorReceiver.java:86)
这两个行号都位于名为“transactionId”的元素的“元素”声明上。这两个模式都在同一个“执行”元素中处理
这让我找到了这个线索:xjc: Two declarations cause a collision in the ObjectFactory class
但我不知道该怎么办。显然,它指定编写一个xjb文件,但我不清楚我在这里要做什么
共 (0) 个答案