我使用下面的代码从带注释的 java 类生成 XSD。 XSD 的默认名称始终为“schema1.xsd”。我应该如何仅使用该插件来预定义它?目前我使用 maven-antrun-plugin 进行文件重命名。 插件手册不包含相关信息。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<goals>
<goal>schemagen</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<sources>
<source>src/main/java/***some package***</source>
</sources>
<outputDirectory>${project.build.directory}/generated-sources/schemas</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
答案已找到。仅使用 JAXB 注释来注释 java 类是不够的。在 DTO 包中应该存在文件“package-info.java”,其内容如下:
@XmlSchema(namespace = "http://your-namespace")
package com.your.package;
import javax.xml.bind.annotation.XmlSchema;
插件声明应该如下所示:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<goals>
<goal>schemagen</goal>
</goals>
<phase>generate-sources</phase>
</execution>
</executions>
<configuration>
<sources>
<source>src/main/java/com/your/package</source>
</sources>
<outputDirectory>${project.build.directory}/generated-sources/schemas</outputDirectory>
<transformSchemas>
<transformSchema>
<uri>http://your-namespace</uri>
<toFile>your-namespace.xsd</toFile>
</transformSchema>
</transformSchemas>
</configuration>
</plugin>
我在@kirill.login 答案中添加了一些详细信息。
我设法通过以下步骤配置 XSD 名称。 首先,我注释了我的 root bean:
package com.mypackage.model.messages;
import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "Packet", namespace="https://www.example.it/schemas/packets")
public class Packet {
然后我在同一个包中添加了文件
package-info.java
:
@XmlSchema(namespace = "https://www.example.it/schemas/packets")
package it.magentalab.datalogger.model.messages;
import jakarta.xml.bind.annotation.XmlSchema;
最后,在我的
pom.xml
:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>3.2.0</version>
<executions>
<!-- Generate XML Schema from sources -->
<execution>
<id>jxc</id>
<goals>
<goal>schemagen</goal>
</goals>
<configuration>
<sources>
<source>src/main/java/com/mypackage/model/messages</source>
<source>src/main/java/com/mypackage/model/messages/package-info.java</source>
</sources>
<transformSchemas>
<transformSchema>
<uri>https://www.example.it/schemas/packets</uri>
<toFile>packets.xsd</toFile>
</transformSchema>
</transformSchemas>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
触发maven
generate-sources
第一阶段以target/packets.xsd
结束。