Spring Maven 多模块打包
各模块介绍
dcode:父模块
dwcode-common:公共子模块
dwcode-common-model:公共子模块
dwcode-company:网站子模块,包含Application
dwcode-system:网站子模块,包含Application
插件介绍
spring-boot-maven-plugin
这个是spring boot使用的插件,通过相关的配置可以生成fat jar包,即在jar包中包含关联的jar包。也可以不打包依赖,需要配合相关参数、命令、插件
maven-jar-plugin
通过此配置,可以在生成jar包时,不包含resources中的配置文件以及可能存在的网页模板等信息,需要配合相关参数、插件
maven-assembly-plugin
这个assembly插件,可以根据需要生成相关的发布目录,并进行压缩打包处理。使用此插件后,可以在命令行运行mvn package就会自动进行打包处理
maven-dependency-plugin
通过此配置将依赖拷贝到指定lib目录下
maven-resources-plugin
通过此配置将资源拷贝到指定conf目录下
Spring Maven 依赖打包单独jar
使用spring-boot-maven-plugin依赖打包单独jar
包含Application的模块pom添加
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
在父模块上执行package
打包结果如下,可以看到分别打包了四个jar包,并且将依赖打了进去
运行jar可以看到已经能启动程序。
如果不添加spring-boot-maven-plugin也能打包,但是没有主清单属性。
Spring Maven 依赖不打包
使用spring-boot-maven-plugin依赖不打包
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 热部署 -->
<fork>true</fork>
<mainClass>com.dwcode.system.SystemApplication</mainClass>
<!-- 依赖不打包必须参数 需执行java -jar -Dloader.path=.,resources,lib dwcode-system-1.0.0.jar -->
<layout>ZIP</layout>
<includes>
<!--依赖不打包-->
<include>
<groupId>non-exists</groupId>
<artifactId>non-exists</artifactId>
</include>
</includes>
</configuration>
</plugin>
使用maven-jar-plugin依赖不打包
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<archive>
<manifest>
<!--是否要把第三方jar放到manifest的classpath中-->
<addClasspath>true</addClasspath>
<!--生成的manifest中classpath的前缀,因为要把第三方jar放到lib目录下,所以classpath的前缀是lib/-->
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.dwcode.system.SystemApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
使用maven-dependency-plugin将依赖拷贝到指定lib目录下
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-lib</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>target/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>false</stripVersion>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
Spring Maven 资源打包
使用resources不打包配置资源文件
<build>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.yml</exclude>
</excludes>
</resource>
</resources>
</build>
使用maven-resources-plugin将资源拷贝到指定conf目录下
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding>
<outputDirectory>target/conf</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
Spring Maven 其他配置
使用maven-compiler-plugin指定打包jdk版本、编码UTF-8
<!--指定jdk 编码-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
使用maven-surefire-plugin跳过测试
<!--默认关掉单元测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>