I have a basic SpringBoot app. using Spring Initializer, embedded Tomcat, Thymeleaf template engine, and package as an executable JAR file. is a multi-module project with Spring Boot, the project will have 3 modules. Here the parent 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"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.3.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>com.tdkcloud</groupId> <artifactId>tdk-cloud</artifactId> <version>0.0.2-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>tdk-core</module> <module>tdk-batch</module> <module>tdk-web</module> </modules> <dependencies> <!-- Spring Boot dependencies --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- Test dependencies --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>uk.co.jemos.podam</groupId> <artifactId>podam</artifactId> <version>7.0.5.RELEASE</version> <scope>test</scope> </dependency> <!-- Logging dependencies --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> <!-- Email dependencies --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <!-- Security dependencies --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <!-- Spring data --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> </dependencies> </project>
Here the module core
<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.tdkcloud</groupId> <artifactId>tdk-cloud</artifactId> <version>0.0.2-SNAPSHOT</version> </parent> <groupId>com.tdkcloud.core</groupId> <artifactId>tdk-core</artifactId> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> <dependencies> <!-- Hibernate dependencies --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> </dependency> <dependency> <groupId>com.googlecode.libphonenumber</groupId> <artifactId>libphonenumber</artifactId> <version>8.4.3</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <!-- <version>1.10</version> --> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <!-- <version>2.9.0.pr3</version> --> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <!-- <version>2.9.0.pr3</version> --> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.9</version> </dependency> </dependencies> </project>
and here the module web:
<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.tdkcloud</groupId> <artifactId>tdk-cloud</artifactId> <version>0.0.2-SNAPSHOT</version> </parent> <groupId>com.tdkcloud.web</groupId> <artifactId>tdk-web</artifactId> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <start-class>com.tdkcloud.TdkCloudApplication</start-class> </properties> <dependencies> <!-- tdk-core dependencies --> <dependency> <groupId>com.tdkcloud.core</groupId> <artifactId>tdk-core</artifactId> <version>0.0.2-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!-- Webjars for JQuery and Bootstrap --> <dependency> <groupId>org.webjars</groupId> <artifactId>bootstrap</artifactId> <version>3.3.7-1</version> </dependency> <dependency> <groupId>org.webjars</groupId> <artifactId>jquery</artifactId> <version>3.2.0</version> </dependency> <!-- Spring Security --> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity4</artifactId> <!-- <version>3.0.2.RELEASE</version> --> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.tdkcloud.TdkCloudApplication</mainClass> </manifest> </archive> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <!-- <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> --> </project>
from the parent root I generate all the modules using:
mvn clean package
But the problem is that the tdk-web-0.0.2-SNAPSHOT.jar
does not contain the tdk-core-0.0.2-SNAPSHOT.jar
and then it fails on the startup
Here the maven result:
MacBook-Pro-de-nunito:tdk-cloud calzada$ mvn clean package -Dmaven.test.skip=true [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] tdk-cloud [INFO] tdk-core [INFO] tdk-batch [INFO] tdk-web [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building tdk-cloud 0.0.2-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.6.1:clean (default-clean) @ tdk-cloud --- [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building tdk-core 0.0.2-SNAPSHOT [INFO] ------------------------------------------------------------------------ [WARNING] The POM for com.h2database:h2:jar:1.4.194 is missing, no dependency information available [INFO] [INFO] --- maven-clean-plugin:2.6.1:clean (default-clean) @ tdk-core --- [INFO] Deleting /Users/calzada/Development/J2EE/workspace-sts-3.8.4.RELEASE/tdk-cloud/tdk-core/target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ tdk-core --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 1 resource [INFO] Copying 1 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ tdk-core --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 52 source files to /Users/calzada/Development/J2EE/workspace-sts-3.8.4.RELEASE/tdk-cloud/tdk-core/target/classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ tdk-core --- [INFO] Not copying test resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ tdk-core --- [INFO] Not compiling test sources [INFO] [INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ tdk-core --- [INFO] Tests are skipped. [INFO] [INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ tdk-core --- [INFO] Building jar: /Users/calzada/Development/J2EE/workspace-sts-3.8.4.RELEASE/tdk-cloud/tdk-core/target/tdk-core-0.0.2-SNAPSHOT.jar [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building tdk-batch 0.0.2-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.6.1:clean (default-clean) @ tdk-batch --- [INFO] Deleting /Users/calzada/Development/J2EE/workspace-sts-3.8.4.RELEASE/tdk-cloud/tdk-batch/target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ tdk-batch --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /Users/calzada/Development/J2EE/workspace-sts-3.8.4.RELEASE/tdk-cloud/tdk-batch/src/main/resources [INFO] skip non existing resourceDirectory /Users/calzada/Development/J2EE/workspace-sts-3.8.4.RELEASE/tdk-cloud/tdk-batch/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ tdk-batch --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to /Users/calzada/Development/J2EE/workspace-sts-3.8.4.RELEASE/tdk-cloud/tdk-batch/target/classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ tdk-batch --- [INFO] Not copying test resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ tdk-batch --- [INFO] Not compiling test sources [INFO] [INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ tdk-batch --- [INFO] Tests are skipped. [INFO] [INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ tdk-batch --- [INFO] Building jar: /Users/calzada/Development/J2EE/workspace-sts-3.8.4.RELEASE/tdk-cloud/tdk-batch/target/tdk-batch-0.0.2-SNAPSHOT.jar [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building tdk-web 0.0.2-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.6.1:clean (default-clean) @ tdk-web --- [INFO] Deleting /Users/calzada/Development/J2EE/workspace-sts-3.8.4.RELEASE/tdk-cloud/tdk-web/target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ tdk-web --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] Copying 339 resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ tdk-web --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 25 source files to /Users/calzada/Development/J2EE/workspace-sts-3.8.4.RELEASE/tdk-cloud/tdk-web/target/classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ tdk-web --- [INFO] Not copying test resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ tdk-web --- [INFO] Not compiling test sources [INFO] [INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ tdk-web --- [INFO] Tests are skipped. [INFO] [INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ tdk-web --- [INFO] Building jar: /Users/calzada/Development/J2EE/workspace-sts-3.8.4.RELEASE/tdk-cloud/tdk-web/target/tdk-web-0.0.2-SNAPSHOT.jar [INFO] [INFO] --- spring-boot-maven-plugin:1.5.3.RELEASE:repackage (default) @ tdk-web --- [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] tdk-cloud ....................................... SUCCESS [ 0.105 s] [INFO] tdk-core ........................................ SUCCESS [ 1.634 s] [INFO] tdk-batch ....................................... SUCCESS [ 0.114 s] [INFO] tdk-web ......................................... SUCCESS [ 1.506 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.663 s [INFO] Finished at: 2017-05-30T05:37:04+02:00 [INFO] Final Memory: 47M/539M [INFO] ------------------------------------------------------------------------ MacBook-Pro-de-nunito:tdk-cloud calzada$
This is the error I got:
*************************** APPLICATION FAILED TO START *************************** Description: Field emailService in com.tdkcloud.web.controllers.AppErrorController required a bean of type 'com.tdkcloud.backend.service.EmailService' that could not be found. Action: Consider defining a bean of type 'com.tdkcloud.backend.service.EmailService' in your configuration.
I unzipped the jar and there is no class of the core module
adding the proposed code to the module web:
<plugin> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <phase>install</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin>
I have the next error: Error resolving template "/tdk/login/login", template might not exist or might not be accessible by any of the configured Template Reso
5 Answers
Answers 1
I think your @ComponentScan annotation is missing, or maybe wrong. (e.g.: @ComponentScan({"com.tdkcloud.web"}) will not find services in com.tdkcloud.backend package). Or maybe @Service annotation is missing from your EmailService.
So to solve this, your code need to look something like this:
App.java (or Webconfig.java)
@Configuration @EnableWebMvc @ComponentScan({"com.tdkcloud"}) @SpringBootApplication public class App { ... }
EmailService.java
public interface EmailService { ... }
EmailServiceImpl.java
@Service public class EmailServiceImpl { ... }
Answers 2
you are missing version
in core module. try adding the following core module pom
<version>0.0.2-SNAPSHOT</version>
so it becomes.
<groupId>com.tdkcloud.core</groupId> <artifactId>tdk-core</artifactId> <packaging>jar</packaging> <version>0.0.2-SNAPSHOT</version>
Answers 3
Try to add this.
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <classifier>exec</classifier> </configuration> </execution> </executions> </plugin>
Repackages existing JAR and WAR archives so that they can be executed from the command line using java -jar. With layout=NONE can also be used simply to package a JAR with nested dependencies (and no main class, so not executable).
Got from this
Answers 4
I was facing the same issue earlier. I am guessing you are not running the jar in the exploded form. You probably need this plugin to pull the jars inside the bundle and execute the .original jar.
<plugin> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <phase>install</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin>
This would bundle all the dependencies you have defined in your pom inside the jar. Hope this helps.
Answers 5
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
I suggest this for creating a executable Jar.
0 comments:
Post a Comment