我尝试从Windows 8命令行使用jaxws:wsgen
maven插件,但失败了:
java.lang.ClassNotFoundException:com.sun.mirror.apt.AnnationProcessorFactory
我知道这表明Maven在我的JDK中找不到tools.jar,但我不知道如何添加它(JDK当然已经安装)。
以下是关于我的配置的一些细节:
echo %JAVA_HOME%
C:Javajdk1.7.0_51
java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
mvn -version
Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 17:22:22+0200)
Maven home: C:Program Files (x86)apache-maven-3.1.1
Java version: 1.7.0_51, vendor: Oracle Corporation
Java home: C:Javajdk1.7.0_51jre
Default locale: de_CH, platform encoding: Cp1252
OS name: "windows 8", version: "6.2", arch: "amd64", family: "windows"
因此,我还尝试在pom.xml中添加一个概要文件部分:
<profiles>
<profile>
<id>default-tools.jar</id>
<activation>
<property>
<name>java.vendor</name>
<value>Sun Microsystems Inc.</value>
</property>
</activation>
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.7.0</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
</profile>
</profiles>
并执行
mvn -P default-tools.jar package
但我仍然得到CCD_ 2。
全输出:
[ERROR]执行目标失败org.codehaus.mojo:jaxws-maven插件:1.10:wsgen(生成wsdl)项目WebService:无法执行wsgen:com/sun/mirror/apt/AnnotationProcessorFactory:com.sun.mirror.apt.AnnationProcessorFactory->[帮助1]org.apache.maven.lifecycle.LifecycleExecutionException:未能execute goal org.codehaus.mojo:jaxws-maven插件:1.10:wsgen项目WebService上的(生成wsdl):无法执行wsgen网址:org.apache.maven.hifecycle.internal.MojoExecution.execute(MojoExecutitor.java:216)网址:org.apache.maven.hifecycle.internal.MojoExecution.execute(MojoExecutitor.java:153)网址:org.apache.maven.hifecycle.internal.MojoExecution.execute(MojoExecutitor.java:145)网址:org.apache.maven.hifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModelBuilder.java:84)网址:org.apache.maven.hifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModelBuilder.java:59)网址:org.apache.maven.hifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleSStarter.java:183)网址:org.apache.maven.hifecycle.internal.LifecycleStarter.execute(LifecycleSstarter.java:161)网址:org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:317)在org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152)网址:org.apache.maven.cli.MavenCli.execute(MavenCli.java:555)网址:org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)网址:org.apache.maven.cli.MavenCli.main(MavenCli.java:158)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)位于java.lang.reflect.Method.ioke(Method.java:606)网址:org.codehaus.cluster.classworlds.launcher.launcher.launchEnhanced(launcher.java:289)网址:org.codehaus.cluster.classworlds.launcher.launcher.launch(launcher.java:229)网址:org.codehaus.cluster.classworlds.launcher.launcher.mainWithExitCode(launcher.java:415)网址:org.codehaus.cluster.classworlds.launcher.launcher.main(launcher.java:356)由:org.apache.maven.plugin.MojoExecutionException引起:未能执行wsgen网址:org.codehaus.mojo.jaxws.AbstractWsGenMojo.execute(AbstractWsGenMojo.java:102)网址:org.codehaus.mojo.jaxws.MainWsGenMojo.execute(MainWsGenMojo.java:14)网址:org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:106)网址:org.apache.maven.hifecycle.internal.MojoExecution.execute(MojoExecutitor.java:208)…19更多原因:java.lang.NoClassDefFoundError:com/sun/mirror/apt/AnnotationProcessorFactory位于java.lang.ClassLoader.defineClass1(本机方法)位于java.lang.ClassLoader.defineClass(ClassLoader.java:800)位于java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)位于java.net.URLClassLoader.defineClass(URLClassLoader.java:449)位于java.net.URLClassLoader.access$100(URLClassLoader.java:71)位于java.net.URLClassLoader$1.run(URLClassLoader.java:361)位于java.net.URLClassLoader$1.run(URLClassLoader.java:355)位于java.security.AccessController.doPrivileged(本机方法)位于java.net.URLClassLoader.findClass(URLClassLoader.java:354)网址:org.codehaus.cluster.classworlds.realm.ClassRealm.loadClassFromSelf(ClassRealm.java:389)网址:org.codehaus.cluster.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:42)网址:org.codehaus.cluster.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:259)网址:org.codehaus.cluster.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:235)网址:org.codehaus.cluster.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:227)网址:com.sun.tools.ws.WsGen.doMain(WsGen.java:69)网址:org.codehaus.mojo.jaxws.AbstractWsGenMojo.execute(AbstractWsGenMojo.java:97)…还有22个原因:java.lang.ClassNotFoundException:com.sun.mirror.apt.AnnationProcessorFactory网址:org.codehaus.cluster.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)网址:org.codehaus.cluster.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:259)网址:org.codehaus.cluster.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:235)网址:org.codehaus.cluster.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:227)…还有38个
此外,将tools.jar
放入本地存储库并不能解决我的问题。
有人知道下一步该做什么吗?
谢谢!
完整的输出(插件出现问题的一些上下文)会很有用。我不完全确定,但我认为jaxws-maven插件缺少类,而不是您的应用程序,所以您应该将依赖项添加到该插件,而不是应用程序。
编辑:注释中的OP代码,以获得更好的读取/复制/粘贴能力
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<...>
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.7</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
</plugin>
您可以尝试的几件事是:由于这是java7,请将供应商更改为"Oracle Corporation"。
你确定你有这条路吗${java.home}/../lib/tools.jar
仅出于测试原因,您可以在默认情况下激活此配置文件,看看这是否有帮助,从而进一步缩小问题范围。
<activation>
<activeByDefault>true</activeByDefault>
</activation>
将wsdl生成器从您正在使用的更改为:
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
所有的配置都是相同的,但它可以与Java7&Java 8(以及openjdk 8,fyi)。