当前位置: 首页 > 知识库问答 >
问题:

用于多个模式的maven-jaxb2-plugin VS jaxb2-maven-plugin

陈胤
2023-03-14

我有多个xsd模式,我想将它们解组到同一文件夹target/generated sources/xjc下的不同包中。我尝试了这两个插件,两个插件似乎都能很好地处理这两种配置,但在maven-jaxb2-plugin的情况下,eclipse插件会无限期地生成类(因为forceRegenate=true),但是如果我没有指定forceRegenate,当我运行mvn clean时,它根本不会生成第二组和第三组类软件包我的配置有任何问题吗?

jaxb2 maven插件

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.6</version>
<executions>
    <execution>
        <id>xjc-scores</id>
        <goals>
            <goal>xjc</goal>
        </goals>
        <configuration>
            <packageName>com.generated.scores</packageName>
            <schemaDirectory>src/main/resources/schemas/scores</schemaDirectory>
        </configuration>
    </execution>
    <execution>
        <id>xjc-videos-ramp</id>
        <goals>
            <goal>xjc</goal>
        </goals>
        <configuration>
            <packageName>com.generated.ramp</packageName>
            <schemaDirectory>src/main/resources/schemas/ramp</schemaDirectory>
            <clearOutputDir>false</clearOutputDir>
        </configuration>
    </execution>
    <execution>
        <id>xjc-schedules</id>
        <goals>
            <goal>xjc</goal>
        </goals>
        <configuration>
            <packageName>com.generated.schedules</packageName>
            <schemaDirectory>src/main/resources/schemas/schedules</schemaDirectory>
            <clearOutputDir>false</clearOutputDir>
        </configuration>
    </execution>
</executions>
<configuration>
</configuration>
</plugin>

maven-jaxb2-plugin

<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.8.3</version>
<executions>
    <execution>
        <id>xjc-scores</id>
        <phase>generate-sources</phase>
        <goals>
            <goal>generate</goal>
        </goals>
        <configuration>
            <generatePackage>com.generated.scores</generatePackage>
            <schemaDirectory>src/main/resources/schemas/scores</schemaDirectory>
            <removeOldOutput>true</removeOldOutput>
        </configuration>
    </execution>
    <execution>
        <id>xjc-ramp</id>
        <phase>generate-sources</phase>
        <goals>
            <goal>generate</goal>
        </goals>
        <configuration>
            <generatePackage>com.generated.ramp</generatePackage>
            <schemaDirectory>src/main/resources/schemas/ramp</schemaDirectory>
            <removeOldOutput>false</removeOldOutput>
        </configuration>
    </execution>
    <execution>
        <id>xjc-schedules</id>
        <phase>generate-sources</phase>
        <goals>
            <goal>generate</goal>
        </goals>
        <configuration>
            <generatePackage>com.generated.schedules</generatePackage>
            <schemaDirectory>src/main/resources/schemas/schedules</schemaDirectory>
            <removeOldOutput>false</removeOldOutput>
        </configuration>
    </execution>
</executions>
<configuration>
    <forceRegenerate>true</forceRegenerate>
</configuration>
</plugin>

以及build helper maven插件配置:

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.8</version>
<executions>
    <execution>
        <id>add-source</id>
        <phase>generate-sources</phase>
        <goals>
            <goal>add-source</goal>
        </goals>
        <configuration>
            <sources>
                <source>target/generated-sources/xjc</source>
            </sources>
        </configuration>
    </execution>
    <execution>
        <id>add-resource</id>
        <phase>generate-sources</phase>
        <goals>
            <goal>add-resource</goal>
        </goals>
        <configuration>
            <resources>
                <resource>
                    <directory>target/generated-sources/xjc</directory>
                    <targetPath>target/classes</targetPath>
                </resource>
            </resources>
        </configuration>
    </execution>
</executions>
</plugin>

共有2个答案

傅花蜂
2023-03-14

我的解决方案:

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.6</version>
<executions>
    <execution>
        <id>xjc-scores</id>
        <phase>generate-sources</phase>
        <goals>
            <goal>xjc</goal>
        </goals>
        <configuration>
            <packageName>com.generated.scores</packageName>
          <schemaDirectory>src/main/resources/schemas/scores</schemaDirectory>
            <clearOutputDir>true</clearOutputDir>
        </configuration>
    </execution>
    <execution>
        <id>xjc-videos-ramp</id>
        <phase>generate-sources</phase>
        <goals>
            <goal>xjc</goal>
        </goals>
        <configuration>
            <packageName>com.generated.ramp</packageName>
            <schemaDirectory>src/main/resources/schemas/ramp</schemaDirectory>
            <clearOutputDir>false</clearOutputDir>
        </configuration>
    </execution>
    <execution>
        <id>xjc-schedules</id>
        <phase>generate-sources</phase>
        <goals>
            <goal>xjc</goal>
        </goals>
        <configuration>
            <packageName>com.generated.schedules</packageName>
          <schemaDirectory>src/main/resources/schemas/schedules</schemaDirectory>
            <clearOutputDir>false</clearOutputDir>
        </configuration>
    </execution>
</executions>
郑桐
2023-03-14

一般建议:在绑定中指定您的包。xjb而不是使用单独的generatePackages执行。

<jxb:bindings schemaLocation="common1.xsd" node="/xsd:schema">
    <jxb:schemaBindings>
        <jxb:package name="mypackage.commonclasses"/>
    </jxb:schemaBindings>
</jxb:bindings>

generatePackage不能很好地处理多个模式。

请提交一个窃听器

https://java.net/jira/browse/MAVEN_JAXB2_PLUGIN

引用了多个模式和Eclipse的问题。我去看看。

ps.SO免责声明:我是maven-jaxb2-plugin的作者。

 类似资料:
  • 问题内容: 我想将多个xsd模式解组到 同一 文件夹下的不同程序包中。我尝试了两个插件,并且似乎都可以在这两种配置下正常工作,但是在使用maven- jaxb2-plugin的情况下,eclipse插件会无限期地生成类(由于= true),但是如果我不指定forceRegenerate,它将不会生成运行时完全没有第二组和第三组类,我的配置是否有问题? jaxb2-maven-插件 maven-ja

  • 我使用Maven3.3.3和maven-jaxb2-plugin Version0.12.1从XSD模式生成java类。XSD所在的地址返回HTTP 302,插件抛出: 是否可以指定xjc编译器遵循302到正确的链接,或者不去尝试下载XSD?

  • 如果您使用类似这样的插件来解析xsd文件,那么在从jdk7升级到JDK8时会遇到以下异常: 您如何使这个插件与JDK8一起工作?

  • 我目前正在使用maven-jaxb2-plugin v0.13.3。 插件配置有多个执行,每个执行都处理wsdl文件。其中有几个是完全独立的,但有几个只是同一企业中不同的wsdl,其模式导入公共的基本模式。 请注意,我无法更改WSDL或模式。 原始代码使用设置为true的“forceRegen”,以及所有写入相同目标目录的代码。这在命令行构建中运行良好,但正如许多人现在所知,这会导致Eclipse

  • 我想从JAXB注释类生成模式。为此,我使用jaxb2 maven插件。默认情况下,插件会扫描src/main/java文件夹中包含的源代码。我想指定一个额外的文件夹来扫描不是maven源路径的java类。 有人能帮忙吗?

  • 这是我的相关部分pom.xml 我使用的是JDK1.7。运行时,会生成对给定xsd文件的解析和相应的JAXB类,但我的要求是生成单独的类,而不是当前生成的内部类。为此,我有一个非常通用的绑定。xml 但是在运行jaxb2插件xjc时;正在生成带有内部静态类的JAXB类。有什么建议吗 `