【问题标题】:XJC episode with mavenXJC插曲与maven
【发布时间】:2012-03-29 15:25:47
【问题描述】:

如何使用 maven 生成剧集?我现在收到一条错误消息:an operand is missing (org.apache.cxf:cxf-xjc-plugin:2.4.0:xsdtojava:generate-sources:generate-sources)

这是我的插件:

<plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-xjc-plugin</artifactId>
            <version>2.4.0</version>
            <configuration>
                <extensions>
                    <extension>org.apache.cxf.xjcplugins:cxf-xjc-dv:2.4.0</extension>
                </extensions>
            </configuration>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>xsdtojava</goal>
                    </goals>
                    <configuration>
                        <xsdOptions>
                            <xsdOption>
                                <extension>true</extension>
                                <xsd>my.xsd</xsd>
                                <packagename>mypackage</packagename>
                                 <extensionArgs>
                                  <arg>-episode</arg>
                                 </extensionArgs>
                            </xsdOption>
                        </xsdOptions>
                    </configuration>

                </execution>
                <execution>
                 <configuration>
                        <xsdOptions>
                 <xsdOption>
                        <extension>true</extension>
                          <xsd>my.xsd</xsd>
                        <extensionArgs>
                            <arg>-Xdv</arg>
                        </extensionArgs>
                    </xsdOption>
                        </xsdOptions>
                    </configuration>

                </execution>


            </executions>

编辑:剧集的创建工作正常。在另一个项目中,包含剧集的 jar 文件通过 episodes 属性给出。但我得到一个例外:Error while parsing schema(s).Location [ file:/D:/workspace/XXX/src/test/resources/XXX.xsd{45,32}]. om.sun.istack.SAXParseException2: compiler was unable to honor this conversion customization. It is attached to a wrong place, or its inconsistent with other bindings. nested in com.sun.istack.SAXParseException2: (the above customization is attached to the following location in the schema)

最终产品中包含剧集信息的 xsd。它在该行上有一些 xjc:javaType 适配器参考。这会导致问题吗?

【问题讨论】:

    标签: java maven jaxb cxf xjc


    【解决方案1】:

    与您使用的插件不同,但几年前我使用过以下截图。您可能想查看是否有更新版本的插件可用等。如果不需要,还可以调整以使用您的架构并删除绑定自定义。

      <plugin>
        <groupId>org.jvnet.jaxb2.maven2</groupId>
        <artifactId>maven-jaxb2-plugin</artifactId>
        <version>0.7.0</version>
        <executions>
          <execution>
            <goals>
              <goal>generate</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <schemaDirectory>${basedir}/src/main/xsd</schemaDirectory>
          <schemaIncludes>
            <schemaInclude>Core.xsd</schemaInclude>
          </schemaIncludes>
          <bindingDirectory>${basedir}/src/main/xjb</bindingDirectory>
          <bindingIncludes>
            <bindingInclude>JaxbBindings.xjb</bindingInclude>
          </bindingIncludes>
          <generateDirectory>${project.build.directory}/generated-sources/jaxb</generateDirectory>
          <episode>true</episode>
          <episodeFile>${project.build.directory}/generated-sources/jaxb/META-INF/sun-jaxb.episode</episodeFile>
          <verbose>true</verbose>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>2.1.10</version>
          </dependency>
          <dependency>
            <groupId>org.jvnet.jaxb2_commons</groupId>
            <artifactId>jaxb-xjc</artifactId>
            <version>2.1.10</version>
          </dependency>
        </dependencies>
      </plugin>
    

    【讨论】:

    • 感谢这已经奏效,但现在我在使用剧集时遇到了问题。 Mybe对此有什么想法吗?见编辑。
    • 据我回忆,为了使用带有情节的 jar,您只需将其传递给 wsimport 或 xjc,应该不需要额外的参数。我很困惑为什么您在错误堆栈中引用了“file:/D:/workspace”。您是否在文件中的某处引用了架构?标准方法是将模式打包到您的 jar 中并从类路径中引用它
    • 我有一个带有 xsd 的库和一个带有另一个 xsd 的项目,它使用库 xsd 中的元素。这是两个不同的项目。最终产品项目将 xsd 从 jar 中解压,以便最终运送到生产系统。最终产品 xsd 引用库 xsd,这就是为什么存在相对引用,堆栈跟踪只打印绝对路径。删除xjc:javaType 注释解决了这个问题,但这仍然是一个奇怪的问题。在我的最终产品 pom 中,我传递了库的依赖关系,否则不考虑情节并创建 lib 代码
    • 我感觉 xjc:javaType 信息不知何故没有保存在剧集中?这可以解释为什么 xjc 编译器认为已经存在的代码和解压后的 jar 是不同的。但这只是一个怀疑,因为我完全不知道剧集是如何运作的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多