Gradle&SpringBoot:来自父项目的依赖导致某些子项目中的问题,但不是所有子项目中的问题

时间:2018-08-16 18:13:14

标签: java spring-boot gradle spring-ws spring-boot-actuator

我有一组Java项目。我在父项目中有一个父build.gradle,每个子项目都有一个build.gradle。结构是这样的:

./my-projects
├── project1
│    ├── build.gradle
├── project2
│    ├── build.gradle
├── build.gradle ---> (parent build file)
├── gradle.properties
├── settings.gradle
├── springboot.gradle ---> (common stuff for all sub projects)
├── subprojects.gradle ---> (common stuff for all sub projects)

在父build.gradle中,我有这个:

apply from: 'springboot.gradle'
apply from: 'subprojects.gradle'

在subprojects.gradle中,我在依赖项中声明了此依赖项:

subprojects {
    dependencies { 
        compile "org.springframework.boot:spring-boot-starter-web-services"
    }
}

Project1和Project2具有相同的性质。两者都是Spring Boot应用程序。两者都使用@RestController批注来公开一组REST服务。问题归结为:虽然project1可以完美地用作REST服务,但project2却不能。由于某些原因,project2充当SOAP服务。我在project2中有GET / project2 / my / service之类的服务,它希望将XML作为输入,而Spring一直在期待SOAP Envelop。这是错误:

Servlet.service() for servlet [messageDispatcherServlet] in context with path [/project2] threw exception [Request processing failed; nested exception is org.springframework.ws.soap.SoapMessageCreationException: Could not create message from InputStream: Unable to create envelope from given source: ; nested exception is com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to create envelope from given source: ] with root cause
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to create envelope from given source because the root element is not named "Envelope"

如果我从subprojects.gradle中删除 compile org.springframework.boot:spring-boot-starter-web-services ,则project2可以正常工作。我读过一些文档说,要拥有SOAP服务,您需要包含 spring-boot-starter-web-services 依赖项。在这里:

https://spring.io/guides/gs/producing-web-service/

我知道我可以通过删除 spring-boot-starter-web-services 来解决此问题,但是我不能仅仅删除它,这就是为什么:我使用project1和project2来描述我的问题,但现实是我已经签出了一个包含15个应用程序的项目,而我正尝试添加第16个应用程序。 spring-boot-starter-web-services 依赖已经存在很长时间了,我不能仅仅为了使我的第16个项目正常工作就将其删除。

我需要了解为什么 spring-boot-starter-web-services 可以用于所有其他15种REST应用程序,而不适用于我的第16款新应用程序。

我在第16个应用程序build.gradle中执行了此变通方法,但没有帮助我理解为什么事情无法按预期进行。

configurations {
    all.collect { configuration ->
        configuration.exclude   group: 'org.springframework.ws', module: 'spring-ws-core'
    }
}

0 个答案:

没有答案