Which artifacts should I use for JAXB RI in my Maven project?
JavaMavenJaxbJaxb2Java Problem Overview
Historically, I always used the following JAXB RI artifacts in my Maven projects:
com.sun.xml.bind:jaxb-impl
- Runtimecom.sun.xml.bind:jaxb-xjc
- Schema compilercom.sun.xml.bind:jaxb-jxc
- Schema generator
Since approximately version 2.2.10*
these artifacts are now described as "old":
> com.sun.xml.bind:jaxb-impl
>
> Old JAXB Runtime module.
So it looks like these artifacts are now obsolete.
The question is:
Which artifacts should be used instead?
Java Solutions
Solution 1 - Java
After clarification with Oracle, the following artifacts should be used:
Runtime
If you want to unmarshal XML to Java objects or marshal Java objects as XML:
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>...</version>
</dependency>
Schema compiler (XJC)
If you have an XML Schema and want to generate the Java code out of it:
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-xjc</artifactId>
<version>...</version>
</dependency>
schemagen
)
Schema generator (JXC/If you have Java classes with JAXB annotations and want to generate a XML Schema based on them:
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-jxc</artifactId>
<version>...</version>
</dependency>
The two latter artifacts (org.glassfish.jaxb:jaxb-xjc
and org.glassfish.jaxb:jaxb-jxc
) are wrapped by Maven plugins so you normally would not need them in the runtime.
Eclipse usage
If your Maven projects somehow don't get the full classpath, turn on debug output and check the Maven console. You might be seeing the following error message there:
> [ERROR] 'dependencyManagement.dependencies.dependency.systemPath' for com.sun:tools:jar must specify an absolute path but is ${tools.jar} @
This is due to the following problem:
> https://stackoverflow.com/questions/13288735/maven-not-picking-java-home-correctly
The solution by @rustyx is to add -vm
option to the eclipse.ini
:
-vm
<PATH_TO_JDK>\jre\bin\javaw.exe