2

我正在构建一些工具来(自动)将大型 ANT 项目转换为 Maven 结构。该项目包含网络服务。因此,我无法更改输入的 wsdl / xsd 文件。这是我的输入 wsdl 文件。它包含对来自项目基目录的类型定义的引用。

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://schemas.test.com/test" name="Test">
    <wsdl:import namespace="http://schemas.test.com/test" location="./src/wsdl/Test.xsd"/>
    <wsdl:types>
    </wsdl:types>
</wsdl:definitions>

这是我的 Maven 插件配置:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <executions>                    
        <execution>                        
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>wsdl2java</goal>
            </goals>                        
            <configuration>                           
                <sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
                <wsdlRoot>${project.build.directory}/../src/wsdl/</wsdlRoot>
                <includes>
                    <include>**/*.wsdl</include>
                </includes>
            </configuration>
        </execution>
    </executions>
</plugin>

构建子模块工作正常,因为 cfx-codegen-plugin 似乎将 ${project.basedir} 作为执行根目录。

但是,当我尝试构建完整的多模块项目时,cfx-codegen-plugin 似乎恢复为 project.parent.basedir。我收到以下构建错误:

原因:WSDLException(在 /wsdl:definitions/wsdl:import):faultCode=PARSER_ERROR:解析“./src/wsdl/Test.xsd”时出现问题。:java.io.FileNotFoundException:C:\Users\test\Desktop\ multimod\src\wsdl\Test.xsd(系统找不到指定的路径)

有谁知道如何:

  1. 在特定的 Maven 阶段更改插件的执行根目录?
  2. 还是强制 cfx-codegen-plugin 使用替代执行根?

谢谢,sjaak

4

0 回答 0