【问题标题】:CXF codegen maven plugin doesn't work OpenJDK 11CXF codegen maven 插件不起作用 OpenJDK 11
【发布时间】:2018-10-17 14:54:24
【问题描述】:

我一直在使用 JDK 9 & 10 和 CXF 代码生成插件 3.2.5 和 3.2.6 没有问题,但是今天我试图将我的代码库从 Oracle JDK 10 更新到 OpenJDK 11 build 28,但是我m 总是遇到同样的错误:

[INFO] Error occurred during initialization of boot layer
[INFO] java.lang.module.FindException: Module java.xml.ws not found
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.747 s
[INFO] Finished at: 2018-10-17T16:38:38+02:00
[INFO] Final Memory: 17M/60M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.cxf:cxf-codegen-plugin:3.2.6:wsdl2java (cerberus-wsdl) on project cerberus: 
[ERROR] Exit code: 1
[ERROR] Command line was: /opt/prod_jdk/bin/java --add-modules java.activation,java.xml.bind,java.xml.ws --add-exports=java.xml.bind/com.sun.xml.internal.bind.v2.runtime=ALL-UNNAMED --add-exports=jdk.xml.dom/org.w3c.dom.html=ALL-UNNAMED --add-exports=java.xml/com.sun.org.apache.xerces.internal.impl.xs=ALL-UNNAMED --add-exports=java.xml.bind/com.sun.xml.internal.bind.marshaller=ALL-UNNAMED --add-opens java.xml.ws/javax.xml.ws.wsaddressing=ALL-UNNAMED --add-opens java.base/java.security=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED -jar /tmp/cxf-tmp-2828938832312113909/cxf-codegen12095310072621993552.jar /tmp/cxf-tmp-2828938832312113909/cxf-w2j12256414556760820901args

这是我使用 CXF 代码生成插件的 pom.xml:

<plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <version>3.2.6</version>
                <configuration>
                    <fork>once</fork>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>javax.annotation</groupId>
                        <artifactId>javax.annotation-api</artifactId>
                        <version>1.3.2</version>
                    </dependency>

                    <dependency>
                        <groupId>javax.activation</groupId>
                        <artifactId>javax.activation-api</artifactId>
                        <version>1.2.0</version>
                    </dependency>

                    <dependency>
                        <groupId>javax.xml.bind</groupId>
                        <artifactId>jaxb-api</artifactId>
                        <version>2.3.1</version>
                    </dependency>

                    <dependency>
                        <groupId>org.glassfish.jaxb</groupId>
                        <artifactId>jaxb-runtime</artifactId>
                        <version>2.3.1</version>
                    </dependency>

                    <dependency>
                        <groupId>javax.xml.ws</groupId>
                        <artifactId>jaxws-api</artifactId>
                        <version>2.3.1</version>
                    </dependency>

                    <dependency>
                        <groupId>com.sun.xml.ws</groupId>
                        <artifactId>jaxws-rt</artifactId>
                        <version>2.3.1</version>
                    </dependency>
                </dependencies>
<executions>...</executions>
<plugin>

我错过了什么吗?据我所知,这应该与 JDK 9 和 10 中的工作方式相同。有一个问题https://issues.apache.org/jira/browse/CXF-7741 谈到了 JDK 11 的兼容性,但这同样适用于 CXF 框架而不是插件(我认为)。

【问题讨论】:

  • 1.您的命令行读取的参数比共享的 Maven 配置部分多。你如何指定这些? 2. 你代码中的哪个类具体依赖于模块java.xml.ws
  • 1.命令行是由我猜的插件生成的。所以maven在编译目标中执行代码生成,CXF运行命令,所以我对命令“一无所知”(如果我错了,请纠正我)。 2. 同第一个问题,CXF codegen 插件使用这个模块通过 WSDL 生成客户端代码。
  • 如果您真的不需要任何此类依赖项,请尝试从插件配置中删除这些依赖项,并且您应该可以正常工作。
  • @nullpointer 这个插件肯定需要java.xml.ws,它是一个WSDL解析器和JAXWS+JAXB类代码生成工具。可以想象这样一种不使用java.xml.ws 的工具,但坦率地说,这种可能性接近于零。我会说类路径上肯定需要该模块(或者至少,不会尝试作为第一步来删除它)。
  • 是的,插件需要该模块,问题是 CXF 插件没有正确读取班级聚会之类的东西,非常欢迎解决方法:)

标签: java maven java-11 cxf-codegen-plugin


【解决方案1】:

此问题将在 cxf 3.3.0 (https://issues.apache.org/jira/browse/CXF-7852) 中解决

目前,您可以在https://github.com/apache/cxf的mvn-plugins目录下运行mvn install来构建插件,并将pom中的版本设置为3.3.0-SNAPSHOT

编辑: 插件位于 apache 快照存储库中,因此最好从那里获取它:

<pluginRepositories>         
   <pluginRepository>
      <id>apache.snapshots</id>
      <name>Maven Plugin Snapshots</name>
      <url>http://repository.apache.org/snapshots/</url>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </pluginRepository>
</pluginRepositories>
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-codegen-plugin</artifactId>
      <version>3.3.0-SNAPSHOT</version>
...

注意(2019-01-28):插件现在是released,我们可以照常添加依赖:

<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-codegen-plugin</artifactId>
  <version>3.3.0</version>
  <type>maven-plugin</type>
</dependency>

【讨论】:

  • 对于大多数人需要 java 8 的复杂构建,应该使用工具链插件来强制使用 java 10 以使 cxf-codegen-plugin 工作。
【解决方案2】:

我也在努力让插件与 Java 11 一起工作。 尝试详述插件依赖解决问题:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-xjc-plugin</artifactId>
                <version>3.2.3</version>
                <dependencies>
                    <dependency>
                        <groupId>com.sun.xml.bind</groupId>
                        <artifactId>jaxb-xjc</artifactId>
                        <version>${jaxb-api.version}</version>
                    </dependency>
                    <!-- Java Architecture for XML Binding (JAXB), Java 11+ support -->                                         
                    <dependency>
                        <groupId>javax.xml.bind</groupId>
                        <artifactId>jaxb-api</artifactId>
                        <version>${jaxb-api.version}</version>
                    </dependency>                       
                    <dependency>
                        <groupId>com.sun.xml.bind</groupId>
                        <artifactId>jaxb-impl</artifactId>
                        <version>${jaxb-api.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>com.sun.xml.bind</groupId>
                        <artifactId>jaxb-core</artifactId>
                        <version>${jaxb-api.version}</version>
                    </dependency>
                    <!-- JavaBeans Activation Framework (JAF), Java 11+ support -->
                    <dependency>
                        <groupId>javax.activation</groupId>
                        <artifactId>javax.activation-api</artifactId>
                        <version>${jaf-api.version}</version>
                    </dependency>       
                    <!-- Java API for XML Web Services (JAX-WS), Java 11+ support -->
                    <dependency>
                        <groupId>javax.xml.ws</groupId>
                        <artifactId>jaxws-api</artifactId>
                        <version>${jaxws-api.version}</version>
                    </dependency>
                </dependencies>                 
            </plugin>               

.. 没有运气。 当我升级到插件的 3.2.3 版本时,问题就消失了 (在等待 3.3.0 时,如下所述:https://issues.apache.org/jira/browse/CXF-7852)。

【讨论】:

    猜你喜欢
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2014-02-26
    相关资源
    最近更新 更多