简体   繁体   中英

Maven jaxb2:xjc failing to generate code

I have added the following plugin into the Maven build in pom.xml

<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

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

version 2.1 has a bug.

You can use <version>2.2</version> with the new syntax:

<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:

<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]. 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.

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. It's so simple: the plugin just need some class to execution. Give it him now :) 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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