java - 无法从 XSD 生成类

标签 java maven jaxb xjc

这是我用来生成类的 pom.xml。我试图通过提供目标作为包来通过 Maven 构建生成。我也尝试过使用 mvn clean install,我没有在控制台中看到任何错误,但是在“target/generated-sources/jaxb”中没有生成任何类

http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0

<groupId>com.login.app</groupId>
<artifactId>Login</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>Login</name>
<url>http://maven.apache.org</url>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>


<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>

                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
    <plugins>
        <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>

                <outputDirectory>target/generated-sources/jaxb</outputDirectory>
                <packageName>com.login.app</packageName>
                <schemaDirectory>src/main</schemaDirectory>
                <schemaFiles>proto.xsd</schemaFiles>

            </configuration>
        </plugin>

    </plugins>
</build>

这是我一直在尝试生成 java 类的示例 XSD 文件,如果需要对 xsd 文件进行任何更改,您能否告诉我。

<xs:element name="UserInfo">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="firsName" type="xs:string" />
            <xs:element name="middleName" type="xs:string" />
            <xs:element name="lastName" type="xs:string" />
            <xs:element name="dob" type="xs:string" />
            <xs:element name="ssn" type="xs:string" />
            <xs:element name="emailId" type="xs:string" />
            <xs:element name="userId" type="xs:string" />
            <xs:element name="password1" type="xs:string" />
            <xs:element name="password2" type="xs:string" />
            <xs:element name="Address">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="addressline1" type="xs:string" />
                        <xs:element name="addressline2" type="xs:string" />
                        <xs:element name="zipCode" type="xs:int" />
                        <xs:element name="street" type="xs:string" />
                        <xs:element name="apt" type="xs:string" />
                        <xs:element name="city" type="xs:string" />
                        <xs:element name="state" type="xs:string" />
                        <xs:element name="country" type="xs:string" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

最佳答案

这是创建的初始基本目录结构。

└───src
    ├───main
    │   └───resources
    └───test

proto.xsd 放在resources下。

上面的模式中有xs前缀,没有声明命名空间。所以修改如下:
proto.xsd

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="UserInfo" >
    <xs:complexType>
        <xs:sequence>
            <xs:element name="firsName" type="xs:string" />
            <xs:element name="middleName" type="xs:string" />
            <xs:element name="lastName" type="xs:string" />
            <xs:element name="dob" type="xs:string" />
            <xs:element name="ssn" type="xs:string" />
            <xs:element name="emailId" type="xs:string" />
            <xs:element name="userId" type="xs:string" />
            <xs:element name="password1" type="xs:string" />
            <xs:element name="password2" type="xs:string" />
            <xs:element name="Address">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="addressline1" type="xs:string" />
                        <xs:element name="addressline2" type="xs:string" />
                        <xs:element name="zipCode" type="xs:int" />
                        <xs:element name="street" type="xs:string" />
                        <xs:element name="apt" type="xs:string" />
                        <xs:element name="city" type="xs:string" />
                        <xs:element name="state" type="xs:string" />
                        <xs:element name="country" type="xs:string" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

这是 pom.xml 文件:

<project xmlns="http://maven.apache.org/POM/4.0.0"   
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0   
http://maven.apache.org/xsd/maven-4.0.0.xsd">  

  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.login.app</groupId>
  <artifactId>Login</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>Login</name>
  <url>http://maven.apache.org</url>

  <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
      </dependency>
  </dependencies>

  <build>
      <pluginManagement>
          <plugins>
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-compiler-plugin</artifactId>

                  <configuration>
                      <source>1.8</source>
                      <target>1.8</target>
                  </configuration>
              </plugin>
          </plugins>
      </pluginManagement>
      <plugins>
          <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>
                  <outputDirectory>target/generated-sources/jaxb</outputDirectory>
                  <packageName>com.login.app</packageName>
                  <schemaDirectory>src/main/resources</schemaDirectory>
                  <schemaFiles>proto.xsd</schemaFiles>
                </configuration>
          </plugin>

      </plugins>
</build>

</project>

如果您在上面注意到,schemaDirectory 值会随着 xsd 文件放置在那里而相应更改。

现在,运行下面的 maven 命令:

mvn clean install

输出:

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Login 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ Login ---
[INFO]
[INFO] --- jaxb2-maven-plugin:1.5:xjc (xjc) @ Login ---
[INFO] Generating source...
[INFO] parsing a schema...
[INFO] compiling a schema...
[INFO] com\login\app\ObjectFactory.java
[INFO] com\login\app\UserInfo.java
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ Login ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ Login ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to D:\workspace\mavenexamples\maven-generate-classes\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ Login ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\workspace\mavenexamples\maven-generate-classes\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ Login ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ Login ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ Login ---
[INFO] Building jar: D:\workspace\mavenexamples\maven-generate-classes\target\Login-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ Login ---
[INFO] Installing D:\workspace\mavenexamples\maven-generate-classes\target\Login-0.0.1-SNAPSHOT.jar to C:\Users\apps\.m2\repository\com\login\app\Login\0.0.1-SNAPSHOT\Login-0.0.1-SNAPSHOT.jar
[INFO] Installing D:\workspace\mavenexamples\maven-generate-classes\pom.xml to C:\Users\apps\.m2\repository\com\login\app\Login\0.0.1-SNAPSHOT\Login-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.241 s
[INFO] Finished at: 2017-03-27T09:47:57+05:30
[INFO] Final Memory: 17M/137M
[INFO] ------------------------------------------------------------------------

还可以看到target目录下的文件:

├───classes
│   └───com
│       └───login
│           └───app
├───generated-sources
│   ├───annotations
│   └───jaxb
│       └───com
│           └───login
│               └───app
├───jaxb2
├───maven-archiver
└───maven-status
    └───maven-compiler-plugin
        └───compile
            └───default-compile

关于java - 无法从 XSD 生成类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43037627/

相关文章:

internet-explorer - 强制 Internet Explorer 使用特定的 Java 运行时环境安装?

java - 有没有与 Cloud/SOAstarting 相关的开源项目?

java - 无法执行目标 org.apache.maven.plugins :maven-enforcer-plugin

java - 如何向 JAXB 生成的类添加自定义行为。自定义不覆盖现有方法

java - 由 : javax. xml.bind.JAXBException 引起:此上下文已知类或其任何父类(super class)

java - 解码时出现 JAXB 意外元素错误

java - 用于处理表单的简单 servlet 或过滤器

java - 在 Maven 世界中获取 Spring(和其他库)

java - Java项目的Docker镜像

java - 单个文件中目标命名空间的多个 <schemaBindings>