有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

让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) 个答案