简体   繁体   English

Maven jaxb2:xjc 无法生成代码

[英]Maven jaxb2:xjc failing to generate code

I have added the following plugin into the Maven build in pom.xml我已将以下插件添加到 pom.xml 中的 Maven 构建中

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>xjc</goal>
            </goals>
            <configuration> 
                <extension>true</extension>                             
                <clearOutputDir>false</clearOutputDir>
                <schemaDirectory>${basedir}/src/main/resources/xsd</schemaDirectory>
                <schemaFiles>myapp.xsd</schemaFiles>                                                        
                <outputDirectory>${basedir}/src/main/java</outputDirectory>         
                <bindingDirectory>src/main/resources/xsd</bindingDirectory>     
                <bindingFiles>myapp-bindings.xjb</bindingFiles>
            </configuration>
        </execution>
    </executions>                       

</plugin>

Following is the build error.以下是构建错误。

[INFO] Ignored given or default xjbSources [C:\WorkSpace\MyApp\src\main\xjb], since it is not an existent file or directory.
[INFO] Ignored given or default sources [C:\WorkSpace\MyApp\src\main\xsd], since it is not an existent file or directory.
[WARNING] No XSD files found. Please check your plugin configuration.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.273s
[INFO] Finished at: Tue May 12 16:24:26 EDT 2015
[INFO] Final Memory: 9M/124M
[INFO] ------------------------------------------------------------------------
[WARNING] The requested profile "dev-artifactory" could not be activated because it does not exist.
[ERROR] Failed to execute goal org.codehaus.mojo:jaxb2-maven-plugin:2.1:xjc (default) on project pml-jasypt-authentication-service: MojoExecutionException: NoSchemasException -> [Help 1]

I am confused, why is the plugin not referring to the paths and files specified in the configuration.我很困惑,为什么插件不引用配置中指定的路径和文件。

Version 2.1 has changed how sources are specified 2.1 版更改了指定来源的方式

http://mojo.codehaus.org/jaxb2-maven-plugin/xjc-mojo.html#sources http://mojo.codehaus.org/jaxb2-maven-plugin/xjc-mojo.html#sources

eg例如

<configuration>
...
  <sources>
     <source>some/explicit/relative/file.xsd</source>
     <source>/another/absolute/path/to/a/specification.xsd</source>
     <source>a/directory/holding/xsds</source>
 </sources>
</configuration>

I'm having a whole world of other problems so sticking with 1.6 as jshark suggested is a good plan我遇到了很多其他问题,所以按照 jshark 的建议坚持使用 1.6 是一个不错的计划

version 2.1 has a bug. 2.1 版有一个错误。

You can use <version>2.2</version> with the new syntax:您可以使用带有新语法的<version>2.2</version>

<configuration>
...
  <sources>
     <source>some/explicit/relative/file.xsd</source>
     <source>/another/absolute/path/to/a/specification.xsd</source>
     <source>a/directory/holding/xsds</source>
 </sources>
</configuration>

You can use <version>1.6</version> with the old syntax:您可以使用带有旧语法的<version>1.6</version>

<configuration>
    ...
    <schemaDirectory>${basedir}/src/main/resources/xsd</schemaDirectory>
    <schemaFiles>myapp.xsd</schemaFiles> 
</configuration>

I had the same problem today, and resolved it by putting:我今天遇到了同样的问题,并通过以下方式解决了它:

<version>1.6</version>

on the plugin definition (which is in general good practice to do)关于插件定义(这通常是好的做法)

I got it working by setting compiler version to JDK 1.8 and jaxb2-maven-plugin version 1.5 According to the documention it will work with minimum JDK 1.6 [ The link may drop dead if its changed in the site].我通过将编译器版本设置为JDK 1.8jaxb2-maven-plugin版本1.5使其工作根据文档,它将与最低 JDK 1.6 一起工作 [如果在站点中更改链接,则该链接可能会失效]。 For example :例如 :

<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.mntq.jaxb.xsd.to.pojo</groupId>
  <artifactId>XsdToPojo</artifactId>
  <version>0.0.1-SNAPSHOT</version>


  <build>
        <finalName>PersistencePoJO</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
             <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>
                <!-- The package of your generated sources -->
                <packageName>com.mntq.jaxb.pojo</packageName>
            </configuration>
        </plugin>
        </plugins>
    </build>
</project> 

We can also use as below:我们也可以使用如下:

           <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>1.5</version>
            <executions>
                <execution>
                    <id>id1</id>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>src/main/java</outputDirectory>
                        <clearOutputDir>false</clearOutputDir>
                        <packageName>com.subu.xsd.model</packageName>
                        <schemaDirectory>src/main/java/schemadir</schemaDirectory>
                        <schemaFiles>XYZ.xsd</schemaFiles>
                    </configuration>
                </execution>
            </executions>
        </plugin>

I resolved it by checking "Force Update of Snapshot/Release" option in eclipse maven update.我通过在 eclipse maven 更新中检查“强制更新快照/发布”选项来解决它。

It forces it to update all of the related dependencies.它强制它更新所有相关的依赖项。

It will be works, if you just add xerces dependency to end of your jaxb plugin declaration.如果您只是将 xerces 依赖项添加到 jaxb 插件声明的末尾,它将起作用。 It's so simple: the plugin just need some class to execution.很简单:插件只需要一些类来执行。 Give it him now :) I. Senatov.现在给他 :) I. Senatov。

            <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>1.6</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <id>xjc-dtd</id>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                    <configuration>
                        <arguments>-dtd</arguments>
                        <dtd>true</dtd>
                        <!-- The package of your generated sources -->
                        <packageName>mi.minet.lurc.dtd</packageName>
                        <schemaDirectory>src/main/resources/dtd</schemaDirectory>
                        <schemaFiles>lurc.dtd</schemaFiles>
                    </configuration>
                </execution>
                <execution>
                    <phase>generate-sources</phase>
                    <id>xjc-xsd</id>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                    <configuration>
                        <packageName>mi.minet.lurc.xsd.configuration</packageName>
                        <schemaDirectory>src/main/resources/xsd</schemaDirectory>
                        <schemaFiles>configuration.xsd</schemaFiles>
                        <clearOutputDir>false</clearOutputDir>
                    </configuration>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>xerces</groupId>
                    <artifactId>xercesImpl</artifactId>
                    <version>2.11.0</version>
                </dependency>
            </dependencies>
        </plugin>

就我而言,我通过将 jdk 编译器版本从 jdk 10 降级到 jdk 1.8 使其工作

在某些情况下,您应该在构建之前使用mvn clean例如

mvn clean compile

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM