maven多模組專案打包war包或者jar包
阿新 • • 發佈:2018-12-19
序言:
打包jar包:
jar包時springboot推薦的打包方式,這種型別的檔案直接java -jar 檔名 就可以直接執行。
-
新增maven外掛:
首先第一步在專案的pom.xml檔案中新增 maven外掛:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
都知道要新增外掛,但關鍵在於新增在什麼地方。我們可以想一想,最終我們需要打包的檔案是什麼?是web專案,所以我們將maven外掛新增到web模組中(也就是除了根pom之外的,最頂級的模組pom檔案)。
這裡給大家解釋下為什麼不能放在父pom.xml檔案中,首先我們來試一下放在父pom檔案中會出現什麼問題:[INFO] demo ............................................... SUCCESS [ 1.615 s] [INFO] demo-dao ........................................... FAILURE [ 2.496 s] [INFO] demo-service ....................................... SKIPPED [INFO] demo-web ........................................... SKIPPED [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4.845 s [INFO] Finished at: 2018-11-02T16:15:37+08:00 [INFO] Final Memory: 37M/335M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.0.6.RELEASE:repackage (default) on project demo-dao: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:2.0.6.RELEASE:repackage failed: Unable to find main class -> [Help 1]
Unable to find main class
在父pom中宣告外掛之後,子模組都會繼承外掛(dependencyManagement
和dependencies
的區別)。所以在執行外掛時,dao模組、service模組都是沒有主函式,所以會報錯。針對這種情況,其實是有方法去解決的,這裡我就不介紹(其實是樓主不會。。。。。) -
執行哪個pom.xml 檔案:
我都試了下,不管是web模組還是父模組都可以執行成功, 但我還是建議執行web模組中的pom進行打包。
-
檔案在哪裡:
檔案最終在 web模組中的target目錄下。
打包 war包:
-
父pom需要一些設定:
<packaging>pom</packaging>
-
web層新增maven外掛,並且設定打包為war包:
<packaging>war</packaging> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
-
依賴包作為jar包打包:
其他模組中新增如下設定:
<packaging>jar</packaging>
-
去除springboot 內建tomcat伺服器:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 移除嵌入式tomcat外掛 --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
-
加入tomcat支援:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
-
修改啟動類,將DemoApplication.java繼承SpringBootServletInitializer並重寫configure方法:
@SpringBootApplication() @MapperScan("com.cj.demo.dao") public class DemoApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(DemoApplication.class); } public static void main(String[] args) { SpringApplication.run(DemoApplication.class); } }
-
打包:
不管在總pom或者web層都可以進行到打包。
打包的war包都在web層的target檔案下。複製貼上到tomcat的webapps下啟動就可以訪問。
總結:
總體而言,maven分模組和maven不分模組進行打包基本沒什麼區別,jar包沒什麼好說的,都一樣的。war包也就是去除tomcat伺服器之類的配置,唯一需要注意的是在依賴的模組中需要加入<packaging>jar</packaging>
配置。仔細想想也挺有道理的,我們先把依賴的模組打包成jar包,然後在web模組中進行引入,然後再進行使用。
下載地址:
demo-war