2

Windows 8 コマンド ラインから maven プラグインを使用しようとしましjaxws:wsgenたが、次のエラーで失敗します。

java.lang.ClassNotFoundException: com.sun.mirror.apt.AnnotationProcessorFactory

これは、Maven が JDK で tools.jar を見つけられないことを示していますが、これを追加する方法がわかりません (JDK はもちろんインストールされています)。

私の構成に関する詳細は次のとおりです。

echo %JAVA_HOME%
C:\Java\jdk1.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:\Java\jdk1.7.0_51\jre
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

しかし、私はまだ取得しClassNotFoundExceptionます。

完全な出力:

[エラー] プロジェクト WebService で目標 org.codehaus.mojo:jaxws-maven-plugin:1.10:wsgen (generate-wsdl) を実行できませんでした: wsgen を実行できませんでした: com/sun/mirror/apt/AnnotationProcessorFactory: com.sun. mirror.apt.AnnotationProcessorFactory -> [ヘルプ 1] org.apache.maven.lifecycle.LifecycleExecutionException: プロジェクト WebService で目標 org.codehaus.mojo:jaxws-maven-plugin:1.10:wsgen (generate-wsdl) を実行できませんでした: 失敗しましたorg.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216) で wsgen を実行するには、org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) で org.apache. org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) で org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) で org.apache.maven .lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.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) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214) at org.apache.maven.cli.MavenCli.main( MavenCli.java:158) で sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) で sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher) で java.lang.reflect.Method.invoke(Method.java:606) で sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) で.java:289) org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) で org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) で org. codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 原因: org.apache.maven.plugin.MojoExecutionException: 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) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) ... 19 より多くの原因: java.lang.NoClassDefFoundError: com/sun/mirror/apt /AnnotationProcessorFactory の java.lang.ClassLoader.defineClass1(Native Method) の 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.org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf(ClassRealm.java:389) の findClass(URLClassLoader.java:354) org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:42) の findClass(URLClassLoader.java:354) org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:259) で org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:235) で org.codehaus.plexus.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.AnnotationProcessorFactory at org.codehaus.plexus.classworlds.strategy.org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:259) の SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50) org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java: 235) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:227) ... 38 もっと見る

またtools.jar、ローカルリポジトリに入れても問題は解決しませんでした。

次に何をしようか考えている人はいますか?

ありがとう!

4

3 に答える 3

2

完全な出力 (プラグインに問題があるコンテキスト) が役立ちます。完全にはわかりませんが、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>
于 2014-01-20T13:44:21.807 に答える
0

wsdl ジェネレーターを使用しているものから次のように変更します。

<plugin>
    <groupId>org.jvnet.jax-ws-commons</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>2.2</version>
</plugin>

すべての構成は同じですが、Java 7 および Java 8 (および openjdk 8、fyi) で動作します。

于 2016-02-03T16:33:52.130 に答える