1 在發(fā)布模塊打包饵撑,而不是父模塊上打包
比如询兴,以下項(xiàng)目目錄:
如果要發(fā)布 api
就直接在它的模塊上打包诡蜓,而不是在父模塊上打包。
2 公共調(diào)用模塊猎塞,打包類(lèi)型設(shè)置為 jar 格式
公共模塊试读,比如 common
和 model
需要設(shè)置 packaging
為 jar
格式,在 pom.xml
配置:
<packaging>jar</packaging>
3 發(fā)布模塊打包類(lèi)型設(shè)置為 war 格式
在發(fā)布的模塊 pom.xml
中設(shè)置:
<packaging>war</packaging>
4 排除內(nèi)置 tomcat
在發(fā)布的模塊 pom.xml
中設(shè)置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
當(dāng)設(shè)置 scope=provided
時(shí)荠耽,此 jar 包不會(huì)出現(xiàn)在發(fā)布的項(xiàng)目中钩骇,從而就排除了內(nèi)置的 tomcat。
5 設(shè)置啟動(dòng)類(lèi)
此步驟相當(dāng)于告訴 tomcat 啟動(dòng)的入口在哪铝量。需要在啟動(dòng)類(lèi)添加如下代碼:
@SpringBootApplication
public class ApiApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ApiApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(ApiApplication.class, args);
}
}
6 如果使用攔截器一定要排除靜態(tài)文件
比如我在項(xiàng)目中使用了 swagger倘屹,那我就需要排除 swagger 的靜態(tài)文件,代碼如下:
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
// 排除靜態(tài)文件
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
// do something
}
7 先裝載公共模塊慢叨,再發(fā)布項(xiàng)目
如果發(fā)布的模塊引用了本項(xiàng)目的其他公共模塊纽匙,需要先把本項(xiàng)目的公共模塊裝載到本地倉(cāng)庫(kù)。
操作方式拍谐,雙擊父模塊的 install
即可哄辣, install
成功之后,點(diǎn)擊發(fā)布模塊的 package
生成 war 包赠尾,就完成了項(xiàng)目的打包,如下圖所示:
8 部署項(xiàng)目
有了 war 包之后毅弧,只需要把單個(gè) war 包气嫁,放入 tomcat 的 webapps 目錄,重新啟動(dòng) tomcat 即可够坐,如下圖所示:
項(xiàng)目正常運(yùn)行會(huì)在 webapps 目錄下生成同名的文件夾寸宵,如下圖所示:
完成以上配置,就可以 happy 的訪問(wèn)自己發(fā)布的項(xiàng)目了元咙。
可能出現(xiàn)的問(wèn)題和解決方案
問(wèn)題一:SpringBoot 配置了端口號(hào)影不影響程序發(fā)布梯影?
答:不影響,配置的 server.port
會(huì)被覆蓋庶香,以 tomcat 本身的端口號(hào)為準(zhǔn)甲棍,tomcat 端口號(hào)在 tomcat/config/server.xml
文件中配置。
問(wèn)題二:發(fā)布報(bào)錯(cuò)赶掖,不能找到其他模塊或項(xiàng)目中的公共模塊感猛,怎么辦?
答:因?yàn)闆](méi)有執(zhí)行父節(jié)點(diǎn) maven 的 install 操作奢赂,install 就是把公共模塊放入本地倉(cāng)庫(kù)陪白,提供給其它項(xiàng)目使用。
問(wèn)題三:不能找到 SpringBoot 運(yùn)行的 main 類(lèi)膳灶,怎么辦咱士?
答:因?yàn)闆](méi)有設(shè)置啟動(dòng)類(lèi)導(dǎo)致的,設(shè)置方式:
- pom.xml 配置啟動(dòng)類(lèi),配置
configuration><mainClass>com.bi.api.ApiApplication</mainClass></configuration>
序厉。 - 啟動(dòng)類(lèi)繼承
SpringBootServletInitializer
實(shí)現(xiàn)SpringApplicationBuilder
方法锐膜,具體代碼參考文中第五部分。
問(wèn)題四:把 SpringBoot 項(xiàng)目部署到 Tomcat 7 一直提示找不到 xxx.jar 包脂矫?
答:這是因?yàn)?SpringBoot 版本太高枣耀,tomcat 版本太低的原因。如果你使用的是最新版的 SpringBoot庭再,可以考慮把 tomcat 也升級(jí)為 tomcat 8.x+ 最新的版本捞奕,就可以解決這個(gè)問(wèn)題。