2017-05-30 75 views
4

我有一個基本的SpringBoot應用程序。使用Spring初始化程序,嵌入式Tomcat,Thymeleaf模板引擎和包作爲可執行JAR文件。 是Spring Boot的一個多模塊項目,該項目將有3個模塊。 這裏父模塊的pom.xmlSpringBoot:運行多模塊項目

<?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> 

這裏模塊核心

<?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> 

這裏的模塊網址:

<?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> 

從父根我生成使用的所有模塊:

mvn clean package 

但問題是,tdk-web-0.0.2-SNAPSHOT.jar不包含tdk-core-0.0.2-SNAPSHOT.jar,然後在啓動

這裏行家導致失敗:

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$ 

這是我得到的錯誤:

*************************** 
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. 

我解壓縮了jar並且沒有核心模塊的類

將建議的代碼添加到模塊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> 

我有一個錯誤:Error resolving template "/tdk/login/login", template might not exist or might not be accessible by any of the configured Template Reso

但模板有: enter image description here

+0

根據錯誤描述,壞的東西出現錯誤與'EmailService'。你的應用程序屬性中是否有'spring.mail。*'設置?如果沒有,只需提供它們。 –

+0

你可以發佈EmailService.java的代碼嗎? – Jobin

+0

你在'EmailService'類的頂部是否有'@ Service'註解? – harshavmb

回答

0

你缺少核心模塊中version。嘗試添加以下核心模塊pom

<version>0.0.2-SNAPSHOT</version> 

因此它變成。

<groupId>com.tdkcloud.core</groupId> 
<artifactId>tdk-core</artifactId> 
<packaging>jar</packaging> 
<version>0.0.2-SNAPSHOT</version> 
+0

同樣的結果,我有這樣的警告:版本是父版本的副本: –

+0

請確保您正在執行'mvn clean install' – Jobin

+0

我做過了:mvn clean install -Dmaven.test.skip = true –

0

嘗試添加相關內容。

 <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).

接到this

0

我面臨同樣的問題早。我猜你沒有以爆炸形式運行罐子。您可能需要使用此插件來拉動捆綁中的罐子並執行.original罐子。

   <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> 

這會綁定你在你的pom裏面定義的所有依賴。希望這可以幫助。

1
  <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> 

我建議這用於創建一個可執行的Jar。

1

我認爲您的@ComponentScan註釋缺失,或者可能是錯誤的。 (例如:@ComponentScan({「com.tdkcloud。。網絡「})不會找到com.tdkcloud.backend包服務)或者,也許@Service註解是從您EmailService缺少

因此,要解決這個問題,你的代碼需要看起來像這樣:

App.java(或Webconfig.java)

@Configuration 
@EnableWebMvc 
@ComponentScan({"com.tdkcloud"}) 
@SpringBootApplication 
public class App { 
    ... 
} 

EmailService.java

public interface EmailService { 
    ... 
} 

EmailServiceImpl.java

@Service 
public class EmailServiceImpl { 
    ... 
}