21

我无法配置jaxb2-maven-plugin从 WSDL 和多个 XSD 文件生成 Java 类,这些文件都存在于同一个标准目录src/main/xsd中。

如何使用带有内联 XSD 的 jaxb2 maven 插件?仅在答案正确建议使用wsdl插件配置中的参数时相关,但该问题确实与内联 XSD 相关,而我的 XSD 是外部的。

插件目标参数在此处列出。

我的插件配置是:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>1.5</version>
    <executions>
        <execution>
            <id>xjc</id>
            <goals>
                <goal>xjc</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <packageName>com.x.y.model</packageName>
        <wsdl>true</wsdl>
    </configuration>
</plugin>

我正在测试这个,mvn -X clean jaxb2:xjc但插件忽略.wsdl了调试输出中看到的

[DEBUG] accept false for file c:\projects\foo\src\main\xsd\service.wsdl
[DEBUG] accept true for file c:\projects\foo\src\main\xsd\datatypes.xsd
[DEBUG] accept true for file c:\projects\foo\src\main\xsd\more-datatypes.xsd
4

6 回答 6

27

通过检查传递给 JAXB XJC 的参数的 Maven 调试输出(以及一些试验和错误),我发现我需要为插件提供另外 2 个配置参数。

这将停止插件对 XSD 文件的扫描,并仅将.wsdl用作源。例如,XSD 文件作为<xsd:include schemaLocation="datatypes.xsd" />指令包含在 WSDL 中,这些指令在本地解析,从而导致 WSDL 和 XSD 中的所有类型都生成为 Java 类。

对我有用的配置部分是:

<configuration>
    <packageName>com.x.y.model</packageName>
    <wsdl>true</wsdl>
    <xmlschema>false</xmlschema>
    <schemaFiles>service.wsdl</schemaFiles>
</configuration>

没有<xmlschema>false</xmlschema>Maven 错误:

org.apache.maven.lifecycle.LifecycleExecutionException:无法在项目 foo 上执行目标 org.codehaus.mojo:jaxb2-maven-plugin:1.5:xjc (default-cli):无法处理架构:/c:/projects/foo /src/main/xsd/service.wsdl

于 2013-04-09T13:26:53.540 回答
7

如果您同时生成 wsdl 和 xsd,请尝试放入不同的执行配置:它可能不一样schemaDirectory,或者插件在第二次执行时不会成功运行,因为它会根据此变量缓存执行。我建议这样做

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>1.6</version>
            <executions>
                <execution>
                    <id>generate-sri-facturas</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>xjc</goal> 
                    </goals> 
                    <configuration> 
                        <outputDirectory>target/generated-sources/sri</outputDirectory>
                        <packageName>${commonsource.packageName}</packageName> 
                        <schemaDirectory>src/main/resources/schema/xsd</schemaDirectory>
                        <schemaFiles>factura_v1.1.0.xsd</schemaFiles>
                    </configuration> 
                </execution> 
                <execution>
                    <id>generate-sri-autorizacion-comprobantes</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>xjc</goal> 
                    </goals> 
                    <configuration> 
                        <outputDirectory>target/generated-sources/sri/autorizacion</outputDirectory>
                        <packageName>${commonsource.packageName}.autorizacion</packageName>
                        <wsdl>true</wsdl>
                        <xmlschema>false</xmlschema>
                        <schemaDirectory>src/main/resources/schema/wsdl</schemaDirectory>
                        <schemaFiles>AutorizacionComprobantes.wsdl</schemaFiles>
                    </configuration> 
                </execution> 
            </executions> 
        </plugin> 

我创建了一个xsd和一个wsdl文件夹来分隔配置。

于 2015-07-17T18:17:03.977 回答
6

您可以在配置中使用以下代码:

              <configuration>
                    <!-- Package to store the generated file -->
                    <packageName>com.example.demo.wsdl</packageName>
                    <!-- Treat the input as WSDL -->
                    <wsdl>true</wsdl>
                    <!-- Input is not XML schema -->
                    <xmlschema>false</xmlschema>
                    <!-- The WSDL file that you saved earlier -->
                    <schemaFiles>horarios.wsdl</schemaFiles>
                    <!-- The location of the WSDL file -->
                    <schemaDirectory>${project.basedir}/src/main/resources</schemaDirectory>
                    <!-- The output directory to store the generated Java files -->
                    <outputDirectory>${project.basedir}/src/main/java</outputDirectory>
                    <!-- Don't clear output directory on each run -->
                    <clearOutputDir>false</clearOutputDir>
                </configuration>
于 2017-07-06T13:13:29.827 回答
5

我对 jaxb2-maven-plugin 2.5.0 有这个问题。这是我的解决方案:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>2.5.0</version>
    <executions>
        <execution>
            <phase>generate-resources</phase>
            <id>xjc</id>
            <goals>
                <goal>xjc</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <sourceType>wsdl</sourceType>
        <sources>
            <source>${project.basedir}/src/main/resources/wsdl</source>
        </sources>
        <outputDirectory>${project.basedir}/src/main/java</outputDirectory>
        <clearOutputDir>false</clearOutputDir>
        <packageName>com.project.generated</packageName>
        <noPackageLevelAnnotations>true</noPackageLevelAnnotations>
    </configuration>
</plugin>
于 2020-06-09T23:19:54.857 回答
4

我试过jaxb2-maven-plugin生成java文件

<plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jaxb2-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>xjc</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <schemaDirectory>src/main/webapp/schemas/</schemaDirectory>
                    <wsdl>true</wsdl>
                    <outputDirectory>src/main/java</outputDirectory>
                </configuration>
            </plugin>

要运行它,我使用了命令

mvn jaxb2:xjc

试试这个,它会在你的 src 文件夹中生成 jaxb 类。希望你正在寻找这个。

于 2013-10-10T09:17:16.857 回答
0

对于 2.5 版,配置如下:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>2.5.0</version>
    <executions>
        <execution>
            <id>xjc</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>xjc</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.basedir}/src/main/java</outputDirectory>
                <packageName>com.packagename</packageName>
                <sources>
                    <source>${project.basedir}/src/main/resources/wsdl</source>
                </sources>
                <sourceType>wsdl</sourceType>
                <clearOutputDir>false</clearOutputDir>
                <noPackageLevelAnnotations>true</noPackageLevelAnnotations>
            </configuration>
        </execution>
    </executions>
</plugin>
于 2021-12-15T14:55:09.850 回答