At my work used jaxws-maven-plugin for code generation. I have two projects are "common" and'' client ". Structure roughly as follows:
app/
common/
resource/
some.xsd
client/
resource/
some.wsdl
How can I generate classes from wsdl in the project "client", using the xsd from the project "common"?
pom.xml:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<verbose>true</verbose>
<bindingFiles>
<bindingFile>${project.parent.basedir}/common/resource/some.xsd</bindingFile>
</bindingFiles>
<wsdlFiles>
<wsdlFile>/resource/some.wsdl</wsdlFile>
</wsdlFiles>
</configuration>
</execution>
</executions>
</plugin>
First of all you should stick to the maven conventions, use src/main/resources/ directories for resources.
After doing that then you can use the maven-dependency-plugin:unpack-dependencies to unpack the common jar file to access the some.xsd:
<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>
<parent>
<groupId>com.stackoverflow.Q13155047</groupId>
<artifactId>app</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>client</artifactId>
<name>${project.artifactId}-${project.version}</name>
<properties>
<schema.location>${project.build.directory}/schemas</schema.location>
</properties>
<dependencies>
<dependency>
<groupId>com.stackoverflow.Q13155047</groupId>
<artifactId>common</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>generate-sources</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includes>**/*.xsd</includes>
<outputDirectory>${schema.location}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<verbose>true</verbose>
<bindingDirectory>${schema.location}</bindingDirectory>
<bindingFiles>
<bindingFile>some.xsd</bindingFile>
</bindingFiles>
<wsdlDirectory>src/main/resources</wsdlDirectory>
<wsdlFiles>
<wsdlFile>some.wsdl</wsdlFile>
</wsdlFiles>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
The jaxws-maven-plugin is bound to the generate-sources phase so adding the maven-dependency-plugin before the jaxws-maven-plugin and to the same phase makes sure that it unpacks everything before applying the wsimport goal.
Make sure that <bindingDirectory/> and <wsdlDirectory/> are correct.
This is how you should do it if you have the *.xsd files in another project. Never access other projects with relative paths. Each project should only access other resources using the dependency mechanism.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With