首先建立一個多模塊的SpringBoot項目java
項目結構web
父pom的內容以下:spring
<?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> <groupId>com.shanghai.abcd</groupId> <artifactId>content-service</artifactId> <packaging>pom</packaging> <version>1.0.1-SNAPSHOT</version> <modules> <module>web-service</module> <module>config-service</module> <module>common-service</module> <module>biz-service</module> <module>dal-service</module> <module>deploy-service</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.RELEASE</version> <relativePath/> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit.version>4.9</junit.version> <java.version>1.8</java.version> <source.encoding>UTF-8</source.encoding> </properties> <dependencies> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>1.5.4.RELEASE</version> <scope>test</scope> </dependency> </dependencies> </project>
子模塊web模塊的pom文件內容以下:apache
<?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"> <parent> <artifactId>content-service</artifactId> <groupId>com.shanghai.abcd</groupId> <version>1.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>web-service</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.shanghai.abcd</groupId> <artifactId>biz-service</artifactId> <version>1.0.1-SNAPSHOT</version> </dependency> </dependencies> <build> <finalName>content</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <encoding>${source.encoding}</encoding> </configuration> </plugin> <!--spring boot 的編譯插件 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
web模塊中main啓動文件app
package com.shanghai.abcd.content; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.ComponentScan; /** * @Auther: * @Date: 2018/5/25 15:26 * @Description: PACKAGE_NAME */ @SpringBootApplication @ConfigurationProperties(value = "classpath:application.properties") @ComponentScan("com.shanghai.abcd.content") public class ContentApplication { public static void main(String[] args) { SpringApplication.run(ContentApplication.class, args); } }
重點是在deploy-service模塊,項目的部署文件都是在該模塊維護的,文件結構以下:maven
deploy-service子模塊文件結構spring-boot
deploy模塊的pom.xml:ui
<?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"> <parent> <artifactId>content-service</artifactId> <groupId>com.shanghai.abcd</groupId> <version>1.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>deploy-service</artifactId> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.4</version> <configuration> <finalName>content</finalName> <appendAssemblyId>false</appendAssemblyId> <!-- 若是隻想有finalName,不須要鏈接release.xml中的id --> <tarLongFileMode>posix</tarLongFileMode> <!-- 解決tar大小的限制問題 --> <descriptors> <descriptor>src/main/assembly/release.xml</descriptor> </descriptors> <outputDirectory>../output</outputDirectory> <attach>false</attach> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
release.xml文件:spa
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd"> <id>content</id> <formats> <format>tar.gz</format> </formats> <includeBaseDirectory>false</includeBaseDirectory> <fileSets> <!-- 程序運行的jar包 --> <fileSet> <directory>../web-service/target/</directory> <!--須要打包的項目文件目錄 --> <outputDirectory>bin</outputDirectory> <!-- 打包後輸出的路徑,生成bin目錄 --> <includes> <include>**/*.jar</include> </includes> <fileMode>0755</fileMode> <!--文件執行權限--> </fileSet> <!-- 程序運行的啓動腳本 --> <fileSet> <directory>target/classes/bin</directory> <!-- 指定要包含的目錄,必須是目錄 --> <outputDirectory>bin</outputDirectory> <!-- 打包的文件解壓後放在該目錄下 --> <includes> <include>**/*.sh</include> </includes> <fileMode>0755</fileMode> <!--文件執行權限--> </fileSet> <fileSet> <!-- 配置文件 --> <directory>../config-service/target/classes</directory> <!-- 指定要包含的目錄,必須是目錄 --> <outputDirectory>conf</outputDirectory> <!-- 指定當前要包含的目錄的目的地 --> <includes> <include>**/*.properties</include> </includes> <fileMode>0755</fileMode> <!--文件執行權限--> </fileSet> </fileSets> <dependencySets> <!-- 項目的依賴包 --> <dependencySet> <outputDirectory>lib</outputDirectory><!-- 依賴jar包放置目錄--> <useProjectArtifact>true</useProjectArtifact> <!-- 當前項目構件是否包含在這個依賴集合裏 --> </dependencySet> </dependencySets> </assembly>
配置文件是統一放在config-service模塊的,該模塊的目錄結構以下:插件
config-service模塊的目錄結構
config模塊的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"> <parent> <artifactId>content-service</artifactId> <groupId>com.shanghai.abcd</groupId> <version>1.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>config-service</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> </dependencies> <profiles> <profile> <id>dev</id> <properties> <environment>dev</environment> </properties> <activation> <activeByDefault>true</activeByDefault> <!-- 默認是dev環境 --> </activation> </profile> <profile> <id>test</id> <properties> <environment>test</environment> </properties> </profile> <profile> <id>prod</id> <properties> <environment>prod</environment> </properties> </profile> </profiles> <build> <resources> <resource> <filtering>true</filtering> <directory>src/main/resources</directory> <excludes> <exclude>application-dev.properties</exclude> <exclude>application-test.properties</exclude> <exclude>application-prod.properties</exclude> <exclude>application.properties</exclude> </excludes> </resource> <resource> <filtering>true</filtering> <!-- 爲了能讓profiles中的內容能讓resources中的文件使用到,須要resources插件將filtering設置爲true --> <directory>src/main/resources</directory> <includes> <include>application-${environment}.properties</include> <include>application.properties</include> </includes> </resource> </resources> </build> </project>
最後經過 mvn clean package -Pdev命令來打包項目,在項目根目錄下生成一個output文件
cd output 後解壓該項目:
tar -zxvf content.tar.gz
獲得以下目錄: