maven打包springboot專案的三種場景
阿新 • • 發佈:2019-01-05
近期開發了一個微服務專案,打包部署的時候遇到過很多問題,現將遇到的問題總結,方便有需要的猿友們借鑑
1、有些公共程式碼,如快取,資料來源和公共實體類以及其它工具類的封裝我們可以打包成工具包,方便其他服務開發時呼叫,其他服務在pom檔案裡新增依賴即可使用,這個時候pom.xml裡的build如下
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources</directory> <excludes> <exclude>**/*.properties</exclude> <exclude>**/*.xml</exclude> </excludes> <filtering>false</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <fork>true</fork> <skip>true</skip> <executable> C:\Program Files\Java\jdk1.8.0_161\bin\javac.exe </executable> </configuration> </plugin> </plugins> </build>
2、一般我們將服務打成jar包直接丟linux伺服器執行即可,這個時候我們pom.xm裡的build如下
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <fork>true</fork> <skip>true</skip> <executable> C:\Program Files\Java\jdk1.8.0_161\bin\javac.exe </executable> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
3、上面的打包方式有個缺陷,就是配置檔案和第三方依賴包都是打到了jar包裡面,如果需要修改配置檔案或者替換第三方依賴包是需要重新構建部署的,如果服務較多,每個服務的jar包裡都包含了第三方依賴包,根據我做的專案中,去除第三方依賴包的jar檔案只有幾十上百KB,而包含第三方依賴包的jar檔案高達幾十上百MB,這樣是很不合理的,我們能不能把第三方依賴jar包和專案配置都提取出來統一管理呢,答案是可以的,只需要將pom.xml裡的build配置成如下
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources</directory> <excludes> <exclude>**/*.properties</exclude> <exclude>**/*.xml</exclude> </excludes> <filtering>false</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <fork>true</fork> <skip>true</skip> <executable> C:/Program Files/Java/jdk1.8.0_161/bin/javac.exe </executable> </configuration> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <useUniqueVersions>false</useUniqueVersions> <mainClass>com.xrq.demo.Application</mainClass> </manifest> <manifestEntries> <Class-Path>./</Class-Path> </manifestEntries> </archive> <excludes> <exclude>*.properties</exclude> </excludes> <excludes> <exclude>*.properties</exclude> <exclude>*.yml</exclude> <exclude>*.xml</exclude> <exclude>config/**</exclude> <exclude>static/**</exclude> <exclude>templates/**</exclude> </excludes> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory> ${project.build.directory}/lib </outputDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build>
打包後target目錄下的除了jar包還會有個lib目錄,第三方依賴包都在這個目錄下,配置檔案根據自己需求自定義後,啟動的時候指定該配置檔案即可,命令為
java -jar -Dspring.config.location=/xxxxxx/xxxxxx/application.properties xxxx.jar
其他配置檔案也可以實現jar包外統一管理,後面篇章會講到
初次寫部落格,如有不對之處,請指正