编程语言
首页 > 编程语言> > java – 如何使用JAXB XJC从外部XSD文件生成类

java – 如何使用JAXB XJC从外部XSD文件生成类

作者:互联网

我有两个项目:

一个
 /src/main/resources/schema.xsd
 的pom.xml


/ SRC /主/根
的pom.xml

我想在B项目中生成来自XSD的类,它存在于A Project中

在B项目的pom.xml中我有:

<dependencies>
    <dependency>
        <groupId>test</groupId>
        <artifactId>A</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>
<build>
    <plugins>
       <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxb2-maven-plugin</artifactId>
        <executions>
            <execution>
                <id>xjc</id>
                <goals>
                    <goal>xjc</goal>
                </goals>
            </execution>
            </executions>
            <configuration>
                <schemaDirectory>src/main/resources</schemaDirectory>
                <outputDirectory>src/main/gen</outputDirectory>
            </configuration>
        </plugin>
    </plugins>

</build>

但是在类路径中找不到xsd文件:

无法在项目B上执行目标org.codehaus.mojo:jaxb2-maven-plugin:1.5:xjc(xjc):未找到任何模式

如何使用其他项目的xsd?

解决方法:

此配置的问题是< schemaDirectory>期望文件名/路径.关于File的事情是它在文件系统上查找文件,从当前工作目录中搜索.在这种情况下项目根.但是项目A的资源不在项目B的src / main / resources中.它是一个类路径资源,其中(当在maven中构建时),src / main / resources甚至不再存在.

我从未尝试过使用jaxb2-maven-plugin,所以我不确定它是否可行.

但是对于maven-jaxb2-plugin,它允许Compiling a schema from a Maven artifact.你可以这么类似

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.9.0</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <schemas>
            <schema>
                <dependencyResource>
                    <groupId>projecta.groupid</groupId>
                    <artifactId>project-a</artifactId>
                    <version>${project.version}</version>
                    <resource>/schema.xsd</resource>
                </dependencyResource>
            </schema>
        </schemas>
        <generateDirectory>src/main/gen/</generateDirectory>
        <generatePackage>mypackage</generatePackage> 
    </configuration>
</plugin>

在这种情况下,它的资源(schema.xsd)位于项目A的src / main / resources中.该插件将生成类文件到mypackage包并获取src / main / gen

标签:java,xsd,jaxb,xjc
来源: https://codeday.me/bug/20190717/1490404.html