Java – Maven spring boot multi module
I'm trying to configure Maven to use spring boot with multiple modules I'm new to Maven and spring boot stuff. I'm not sure how it works together So I started to create a simple structure At first I want to start with a module
myApp | |--web module |----java |------controller |------Application.java (Main Methode) |----resources |------templates |--------index.html |------application.propperties |------log4j2.json |----webapp |----pom.xml |--pom.xml
This is my father POM xml:
<?xml version="1.0" encoding="UTF-8"?> <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>net.benteler.apps.saplication</groupId> <artifactId>saplication</artifactId> <version>0.0.1-SNAPSHOT</version> <modules> <module>web</module> </modules> <packaging>pom</packaging> <name>saplication</name> <description>Shows SAP Reports</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.7</java.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> <version>5.0.1.Final</version> </dependency> <!-- Database Driver--> <dependency> <groupId>MysqL</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> <version>5.1.36</version> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc</artifactId> <version>6</version> </dependency> <!-- JSON handling--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.6.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.6.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.6.2</version> </dependency> </dependencies> </dependencyManagement> <build> <finalName>saplication-snapshot</finalName> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
Here is my main module POM xml:
<?xml version="1.0" encoding="UTF-8"?> <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"> <parent> <artifactId>saplication</artifactId> <groupId>net.benteler.apps.saplication</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>web</artifactId> <dependencies> <!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- Spring Boot Logging with Log4J--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <!-- Data handling --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <exclusions> <exclusion> <groupId>xml-apis</groupId> <artifactId>xml-apis</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> </dependency> <!-- Database Driver--> <dependency> <groupId>MysqL</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc</artifactId> </dependency> <!-- Unit testing --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <!-- JSON handling--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </dependency> <!-- Templating - deliver JSP--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> </dependencies> <build> <finalName>saplication-snapshot</finalName> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
I added my application propperties
spring.view.prefix = /templates/ spring.view.suffix = .html
My application Java looks like this:
@SpringBootApplication public class Application { public static void main(String[] args) { System.out.println("Hallo"); SpringApplication.run(SaplicationApplication.class,args); } }
My controller
@Controller public class MainController { private static final Logger logger = LogManager.getLogger(MainController.class.getName()); @RequestMapping("/test") public String index(ModelAndView modelAndView) { logger.info("/test"); logger.debug("Hello world - debug log"); logger.info("Hello world - info log"); logger.warn("Hello world - warn log"); logger.error("Hello world - error log"); return "index"; } }
When I started the application, the mapping was running
Mapped "{[/test]}" onto public java.lang.String saplication.controller.MainController.index(org.springframework.web.servlet.ModelAndView)
And display log messages
[INFO ] 2015-10-06 08:41:37.477 [http-nio-8080-exec-1] MainController - /test [INFO ] 2015-10-06 08:41:37.478 [http-nio-8080-exec-1] MainController - Hello world - info log [WARN ] 2015-10-06 08:41:37.478 [http-nio-8080-exec-1] MainController - Hello world - warn log [ERROR] 2015-10-06 08:41:37.478 [http-nio-8080-exec-1] MainController - Hello world - error log
But when I type http://localhost:8080/test I only saw the news
Whitelabel Error Page This application has no explicit mapping for /error,so you are seeing this as a fallback. Tue Oct 06 08:41:37 CEST 2015 There was an unexpected error (type=Not Found,status=404). No message available
Everything seems normal in the first view, but the problem I encountered was that spring didn't find my index HTML template
I just don't know what's wrong with my configuration! So I need your help
Solution
Place your resources in the Src / main / Resources folder in the web module This is the default Maven structure for resources