Java 在spring引导中加载子模块上下文
我在访问spring boot的服务时遇到一些问题。我有两个项目叫做“父项目”,第二个是子项目。子项目作为模块项目添加到父项目中。所以问题是,当我尝试访问父项目时,它工作正常,但当我尝试访问子项目服务时,它会给我错误 白标错误页 此应用程序没有针对/error的显式映射,因此您将其视为回退。Wed Apr 13 22:29:30 PKT 2016 出现意外错误(类型=未找到,状态=404)。 没有可用的消息 下面是两个项目的代码 父项目 Example.javaJava 在spring引导中加载子模块上下文,java,spring-boot,Java,Spring Boot,我在访问spring boot的服务时遇到一些问题。我有两个项目叫做“父项目”,第二个是子项目。子项目作为模块项目添加到父项目中。所以问题是,当我尝试访问父项目时,它工作正常,但当我尝试访问子项目服务时,它会给我错误 白标错误页 此应用程序没有针对/error的显式映射,因此您将其视为回退。Wed Apr 13 22:29:30 PKT 2016 出现意外错误(类型=未找到,状态=404)。 没有可用的消息 下面是两个项目的代码 父项目 Example.java package com.pos.
package com.pos.dashboard.backend;
@RequestMapping("/test/**")
@RestController
public class Example {
@RequestMapping(method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE})
public String index() {
return "Hello World";
}
package com.pos.dashboard.backend;
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class HelloWorldApplication {
public static void main(String[] args) {
SpringApplication.run(HelloWorldApplication.class, args);
}
package com.jira.pos.widget;
@RequestMapping("/tester/**")
@RestController
public class Example {
@RequestMapping(method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE})
public String index() {
return "Hello World";
}
HelloWorldApplication.java
package com.pos.dashboard.backend;
@RequestMapping("/test/**")
@RestController
public class Example {
@RequestMapping(method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE})
public String index() {
return "Hello World";
}
package com.pos.dashboard.backend;
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class HelloWorldApplication {
public static void main(String[] args) {
SpringApplication.run(HelloWorldApplication.class, args);
}
package com.jira.pos.widget;
@RequestMapping("/tester/**")
@RestController
public class Example {
@RequestMapping(method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE})
public String index() {
return "Hello World";
}
Pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>dashboard</groupId>
<artifactId>com.pos.interfaces</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.1.RELEASE</version>
</parent>
<properties>
<!-- The main class to start by executing java -jar -->
<start-class>com.pos.dashboard.backend.HelloWorldApplication</start-class>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<modules>
<module>jira-widget-app</module>
</modules>
</project>
package com.jira.pos.widget;
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class HelloWorldApplication1 {
public static void main(String[] args) {
SpringApplication.run(HelloWorldApplication1.class, args);
}
HelloWorldApplication1.java
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>dashboard</groupId>
<artifactId>com.pos.interfaces</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.1.RELEASE</version>
</parent>
<properties>
<!-- The main class to start by executing java -jar -->
<start-class>com.pos.dashboard.backend.HelloWorldApplication</start-class>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<modules>
<module>jira-widget-app</module>
</modules>
</project>
package com.jira.pos.widget;
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class HelloWorldApplication1 {
public static void main(String[] args) {
SpringApplication.run(HelloWorldApplication1.class, args);
}
Pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>dashboard</groupId>
<artifactId>com.pos.interfaces</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>jira-widget-app</artifactId>
<packaging>jar</packaging>
<properties>
<!-- The main class to start by executing java -jar -->
<start-class>com.jira.pos.widget.HelloWorldApplication1</start-class>
</properties>
</project>
4.0.0
仪表板
它在浏览器上向我返回Hello World
但是,当我尝试访问
it白标错误页面
此应用程序没有/error的显式映射,因此您将其视为回退。
2016年4月13日星期三22:37:17北京时间
出现意外错误(类型=未找到,状态=404)。
没有可用的消息父项目扫描当前包及其子包中的Springbeans。这是您的案例com.pos.dashboard.backend
您有两个选项(应该只需要其中一个):
将子项目的根包更改为类似于com.pos.dashboard.backend.child的内容,以便父JAR模块扫描它
将子模块中的包包括到父组件扫描中:
package com.pos.dashboard.backend;
@Configuration
@ComponentScan({"com.pos.dashboard.backend", "com.jira.pos.widget"})
@EnableAutoConfiguration
public class HelloWorldApplication {
顺便说一句,如果未将子@EnableAutoConfiguration
用作独立的Spring引导应用程序,则它是冗余的
对评论的反应:
哦,我也错过了你们并没有子项目作为父项目的Maven依赖项。Maven多模块项目为每个模块创建JAR。在您的例子中,您有父模块(同时也是多模块Maven父模块)和子模块
我建议创建第三个Maven pom,完全用于多模块设置,并有两个模块(您的父项目和子项目)。当然,您需要将子项目和maven依赖项包含到父项目中
您能包括软件包吗?软件包已添加到代码中。谢谢您的回复。我根据您的建议进行了更改1)更改子模块包com.pos.dashboard.backend.child 2)在父模块中添加以下包作为组件扫描,但仍然没有成功..'@Configuration@ComponentScan({“com.pos.dashboard.backend”,“com.pos.dashboard.backend.child”})@EnableAutoConfiguration public class HelloWorldApplication{public static void main(String[]args){SpringApplication.run(HelloWorldApplication.class,args);}很抱歉,我的答案可能让人困惑。只需要一个选项。不需要两个。如果您更改了子模块中的所有包(选项1),@ComponentScan
属性应该是不必要的(选项2)。对此很抱歉。我坚持使用第二个选项,但仍然使用localhost:8080/api工作,但不工作。我可以向您发送代码吗?它只有四个类OK更正我的错误,到目前为止,我有两个项目子项目(jira widget app)父项目(pos接口仪表板)父项依赖子项,如jira小部件应用程序pom,因此您希望我创建另一个项目,该项目将依赖父项项目(pos接口仪表板),比如称为主应用程序的新项目,然后它将具有pos接口仪表板或pos接口仪表板jira小部件应用程序