使用xjc从XSD生成Java源时禁用依赖项

时间:2015-02-03 09:59:31

标签: maven eclipselink xjc

我最近在我的maven依赖项中添加了org.eclipse.persistence:eclipselink:2.6.0-M3

问题是我使用org.codehaus.mojo:jaxb2-maven-plugin:xjc目标从我的*.xsd XML模式构建java源代码,现在我在构建时遇到了这个错误:

Exception in thread "main" java.util.ServiceConfigurationError: com.sun.tools.xjc.Plugin: Provider org.eclipse.persistence.jaxb.plugins.BeanValidationPlugin could not be instantiated
    at java.util.ServiceLoader.fail(ServiceLoader.java:224)
    at java.util.ServiceLoader.access$100(ServiceLoader.java:181)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:377)
    at java.util.ServiceLoader$1.next(ServiceLoader.java:445)
    at com.sun.tools.xjc.Options.findServices(Options.java:957)
    at com.sun.tools.xjc.Options.getAllPlugins(Options.java:374)
    at com.sun.tools.xjc.reader.AbstractExtensionBindingChecker.<init>(AbstractExtensionBindingChecker.java:100)
    at com.sun.tools.xjc.reader.ExtensionBindingChecker.<init>(ExtensionBindingChecker.java:81)
    at com.sun.tools.xjc.ModelLoader$XMLSchemaParser.parse(ModelLoader.java:264)
    at com.sun.xml.xsom.impl.parser.NGCCRuntimeEx.parseEntity(NGCCRuntimeEx.java:347)
    at com.sun.xml.xsom.impl.parser.ParserContext.parse(ParserContext.java:128)
    at com.sun.xml.xsom.impl.parser.ParserContext.<init>(ParserContext.java:100)
    at com.sun.xml.xsom.parser.XSOMParser.<init>(XSOMParser.java:110)
    at com.sun.tools.xjc.ModelLoader.createXSOMParser(ModelLoader.java:437)
    at com.sun.tools.xjc.ModelLoader.createXSOMSpeculative(ModelLoader.java:510)
    at com.sun.tools.xjc.ModelLoader.loadXMLSchema(ModelLoader.java:369)
    at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:174)
    at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:119)
    at com.sun.tools.xjc.Driver.run(Driver.java:333)
    at org.codehaus.mojo.jaxb2.AbstractXjcMojo.execute(AbstractXjcMojo.java:316)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.MojoExecutor.executeForkedExecutions(MojoExecutor.java:365)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:199)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: java.lang.NoClassDefFoundError: com/sun/tools/xjc/model/CPropertyVisitor2
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2585)
    at java.lang.Class.getConstructor0(Class.java:2885)
    at java.lang.Class.newInstance(Class.java:350)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:373)
    ... 42 more
Caused by: java.lang.ClassNotFoundException: com.sun.tools.xjc.model.CPropertyVisitor2
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 47 more

我已经看到eclipselink-2.6.0-M3.jar确实声明/META-INF/services/com.sun.tools.xjc.Plugin需要com.sun.tools.xjc.model.CPropertyVisitor2,而xjc不在我的依赖项中。

有没有办法告诉xjc在执行{{1}} maven目标时不要使用插件或更改依赖项?

3 个答案:

答案 0 :(得分:2)

我发现解决方法(这并不能让我满意,因为它并没有真正回答我的问题):添加com.sun.xml.bind:jaxb-xjc:2.2.11作为我项目提供的依赖项。

答案 1 :(得分:0)

我发现了解决方法:

  • 在pom.xml上添加以下脚本:
<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>
        <schemaDirectory>resources/xsd/myfolderxsd</schemaDirectory>
        <outputDirectory>src/main/java</outputDirectory>
        <packageName>mypackage</packageName>
    </configuration>
</plugin>
  • 点击右键并生成资源

答案 2 :(得分:0)

尝试更新maven jaxb2插件,例如:

在pom.xml中搜索jaxb2-maven-plugin并将其更新为最新版本(例如:2.2)

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.2</version>
</plugin>

此解决方案的理由: https://bugs.eclipse.org/bugs/show_bug.cgi?id=462508

问候