尝试从 WSDL 文件生成时出现 Maven 问题

Posted

技术标签:

【中文标题】尝试从 WSDL 文件生成时出现 Maven 问题【英文标题】:Maven trouble when trying to generate from WSDL file 【发布时间】:2015-04-14 14:31:09 【问题描述】:

我正在尝试从 wsdl 文件生成源代码,但我在 pom.xml 上不断遇到错误,我认为这可能是我的问题?下面是我从我的 pom 和我的 pom 文件中得到的错误。我也无法使用“mvn clean install”构建项目。我似乎得到了一个没有真正原因的错误。

生成标签处的错误:

Execution default of goal org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.12.3:generate failed: A required class was missing while executing org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.12.3:generate: com/sun/codemodel/CodeWriter
-----------------------------------------------------
realm =    plugin>org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.12.3-715230752
strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
urls[0] = file:/C:/Users/Windows/.m2/repository/org/jvnet/jaxb2/maven2/maven-jaxb2-plugin/0.12.3/maven-jaxb2-plugin-0.12.3.jar
urls[1] = file:/C:/Users/Windows/.m2/repository/org/jvnet/jaxb2/maven2/maven-jaxb2-plugin-core/0.12.3/maven-jaxb2-plugin-core-0.12.3.jar
urls[2] = file:/C:/Users/Windows/.m2/repository/org/slf4j/slf4j-api/1.7.7/slf4j-api-1.7.7.jar
urls[3] = file:/C:/Users/Windows/.m2/repository/org/apache/commons/commons-lang3/3.2.1/commons-lang3-3.2.1.jar
urls[4] = file:/C:/Users/Windows/.m2/repository/com/sun/org/apache/xml/internal/resolver/20050927/resolver-20050927.jar
urls[5] = file:/C:/Users/Windows/.m2/repository/junit/junit/4.8.1/junit-4.8.1.jar
urls[6] = file:/C:/Users/Windows/.m2/repository/org/codehaus/plexus/plexus-utils/1.5.15/plexus-utils-1.5.15.jar
urls[7] = file:/C:/Users/Windows/.m2/repository/org/jvnet/jaxb2/maven2/maven-jaxb22-plugin/0.12.3/maven-jaxb22-plugin-0.12.3.jar
urls[8] = file:/C:/Users/Windows/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.2.11/jaxb-runtime-2.2.11.jar
urls[9] = file:/C:/Users/Windows/.m2/repository/org/glassfish/jaxb/jaxb-xjc/2.2.11/jaxb-xjc-2.2.11.jar
urls[10] = file:/C:/Users/Windows/.m2/repository/org/apache/maven/plugin-tools/maven-plugin-annotations/3.2/maven-plugin-annotations-3.2.jar
Number of foreign imports: 5
import: Entry[import org.sonatype.plexus.build.incremental from realm ClassRealm[plexus.core, parent: null]]
import: Entry[import org.codehaus.plexus.util.Scanner from realm ClassRealm[plexus.core, parent: null]]
import: Entry[import org.codehaus.plexus.util.DirectoryScanner from realm ClassRealm[plexus.core, parent: null]]
import: Entry[import org.codehaus.plexus.util.AbstractScanner from realm ClassRealm[plexus.core, parent: null]]
import: Entry[import  from realm ClassRealm[maven.api, parent: null]]

-----------------------------------------------------
 (org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.12.3:generate:default:generate-sources)

我的 pom.xml 文件:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.ws</groupId>
        <artifactId>spring-ws-core</artifactId>
    </dependency>
    <dependency>
        <groupId>com.bigthunk</groupId>
        <artifactId>BigThunkCore</artifactId>
        <version>0.0.7-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.bigthunk</groupId>
        <artifactId>BigThunkWeb</artifactId>
        <version>0.0.4-SNAPSHOT</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <!-- tag::wsdl[] -->
        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <schemaLanguage>WSDL</schemaLanguage>
                <generatePackage>hello.wsdl</generatePackage>
                <forceRegenerate>true</forceRegenerate>
                <schemas>
                    <schema>
                        <url>http://172.19.137.21:8280/services/umarketsc?wsdl</url>
                    </schema>
                </schemas>
            </configuration>
        </plugin>
        <!-- end::wsdl[] -->
    </plugins>
</build>

<repositories>
    <repository>
        <id>project.local</id>
        <name>project</name>
        <url>file:$project.basedir/repo</url>
    </repository>
    <repository>
        <id>spring-releases</id>
        <name>Spring Releases</name>
        <url>https://repo.spring.io/libs-release</url>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>spring-releases</id>
        <url>https://repo.spring.io/libs-release</url>
    </pluginRepository>
</pluginRepositories>

【问题讨论】:

原来是实际 wsdl 文件中的一个错误导致了这种情况。 我仍然有兴趣查看导致它崩溃的 WSDL。 @javawocky 你做了什么改变?修复它? 首先尝试,如果您的 URI 是最新的并且 WS 正在运行。要尝试 WSDL,请将 URI 放入浏览器地址行:172.19.137.21:8280/services/umarketsc?wsdl。它是否有效?如果没有,请检查 WS 是否启动。检查 URI。 【参考方案1】:

&lt;plugins&gt; 标记包含在&lt;pluginManagement&gt; 标记内(详见此处:How to solve "Plugin execution not covered by lifecycle configuration" for Spring Data Maven Builds)解决了我的问题。

【讨论】:

非常感谢,这已经解决了我的问题。干杯【参考方案2】:

将你的 Java 路径 jre 更改为你的 jdk 路径就可以了! 在 Eclipse 中,您还可以将“已安装的 JRE”更改为您的 jdk。

希望它对你有用。

【讨论】:

【参考方案3】:

就我而言,我按照插件 wiki 中的说明更改 JAXB 规范版本来修复它:

https://github.com/highsource/maven-jaxb2-plugin/wiki/Using-a-Specific-JAXB-Version

使用配置选项 specVersion=2.0 或使用特定于版本的插件:ma​​ven-jaxb20-plugin

【讨论】:

【参考方案4】:

对我来说,这是一个环境(java 运行时)问题。我可以通过在 Windows 命令提示符下启动 eclipse 来解决由 m2e 在我的上下文中触发的类似问题: eclipse.exe -vm "C:\Program Files\Java\jdk1.8.0_25\bin\javaw.exe" (确保它出现在“-vmargs”之前) 然后我尝试以与从资源管理器启动 eclipse 相同的方式清理我的 eclipse.ini,它确实有效。当我查看 Javavisual VM 中的 eclipse 命令时,我通过 Jvisual vm 看到 eclipse 看起来是这样的

eclipse.commands=-os
win32
...
-vm "C:\Program Files\Java\jdk1.8.0_25\bin\javaw.exe"
-vm C:\Program Files\Java\jre1.8.0_25\bin\server\jvm.dll

最后一行不是来自我的 eclipse.ini,而是由 Eclipse 启动器附加的。在系统属性中:eclipse.vm=C:\Program Files\Java\jre1.8.0_25\bin\server\jvm.dll 这看起来像“当从资源管理器启动时”,Eclipse luna 会从覆盖 eclipse.ini 的 PATH 上找到 jre 附加参数......环境中必须存在一些差异,可以解释进程的不同行为。

【讨论】:

您先生应该获得最高荣誉勋章。 看来你不能把 vm arg 放在同一行:***.com/a/2454767/1084605 它对我有用!【参考方案5】:

我遇到了这个问题,但我能够解决它:

    我删除了所有单个 JRE 文件(以前和当前版本) 添加到“路径”C:\Program Files\Java\jdk1.8.0_91\jre\bin(我在 Win10 上工作) 利润。

问题出在版本 0.12.2 - 0.13.1 上,它完全消失了。

【讨论】:

【参考方案6】:

添加

<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.2.11</version>
</dependency>

到你的 pom,它包含缺少的类,我修复了它。

【讨论】:

最终发现错误来自wsdl文件本身,而不是我的pom.xml【参考方案7】:

就我个人而言,我使用sdkman 来管理我的 Java 版本,我通过在运行 Maven 命令之前从 Java 11 切换到 8 解决了这个问题。

【讨论】:

以上是关于尝试从 WSDL 文件生成时出现 Maven 问题的主要内容,如果未能解决你的问题,请参考以下文章

svcutil 无法从 wsdl 文件生成代码

如何从现有的 WSDL 和 XSD 文件生成 WCF 服务主机

如何使用 jaxb2-maven-plugin 2.x 从 WSDL 生成 Java 类?

尝试从 maven 运行 java 程序时出现异常

如何使用 gradle 从 WSDL 和 XSD 生成类,相当于 maven-jaxb2-plugin

CXF从wsdl生成SEI和java类