使用maven快速生成打包文件2
前面介绍了使用Maven打包基于SpringBoot开发的微服务,打出的JAR包包含所有的依赖,因此一般包比较大,可能会有几百M,但是有时候在调试阶段,经常需要更新程序,每更新一次就要上传几百M的JAR包,特别不方便,因此这里提供一种方法将依赖的JAR包统一放到lib目录中,这样打出的微服务包就很小了,更新起来也方便很多。先上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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>kafka-roma</artifactId><version>1.0</version><name>kafka-roma</name><description>kafka-roma</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version><maven.test.skip>true</maven.test.skip></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>2.7.2</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.52</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><finalName>${project.artifactId}</finalName><resources><resource><directory>src/main/resources</directory><filtering>true</filtering><excludes><exclude>*.properties</exclude><exclude>*.yml</exclude><exclude>*.xml</exclude></excludes></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>${java.version}</source><target>${java.version}</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><manifest><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix><mainClass>org.example.roma.KafkaRomaApplication</mainClass></manifest></archive></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><includeSystemScope>true</includeSystemScope><layout>ZIP</layout><jvmArguments>-Dfile.encoding=UTF-8</jvmArguments><includes><include><groupId>nothing</groupId><artifactId>nothing</artifactId></include></includes></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><execution><id>copy-dependencies</id><phase>prepare-package</phase><goals><goal>copy-dependencies</goal></goals><configuration><outputDirectory>${project.build.directory}/roma/lib</outputDirectory><overWriteReleases>false</overWriteReleases><overWriteSnapshots>false</overWriteSnapshots><overWriteIfNewer>true</overWriteIfNewer><includeScope>compile</includeScope><excludeScope>test</excludeScope><excludeArtifactIds>junit-jupiter,junit-jupiter-api,junit-jupiter-engine,junit-jupiter-params,junit-platform-commons,junit-platform-engine</excludeArtifactIds></configuration></execution></executions></plugin><plugin><artifactId>maven-resources-plugin</artifactId><executions><execution><id>copy-resources</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><resources><resource><directory>src/main/resources</directory><includes><include>*.properties</include><include>*.yml</include><include>**/*.xml</include></includes></resource></resources><outputDirectory>${project.build.directory}/roma/config/</outputDirectory></configuration></execution></executions></plugin><plugin><artifactId>maven-resources-plugin</artifactId><executions><execution><id>copy-resources1</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><resources><resource><directory>src/main/bin</directory><includes><include>start.sh</include><include>stop.sh</include></includes></resource></resources><outputDirectory>${project.build.directory}/roma/bin/</outputDirectory></configuration></execution><execution><id>copy-resources2</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><resources><resource><directory>src/main/bin</directory><includes><include>run.sh</include><include>run.bat</include></includes></resource></resources><outputDirectory>${project.build.directory}/roma/</outputDirectory></configuration></execution><execution><id>copy-resources3</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><resources><resource><directory>cert</directory><includes><include>*.jks</include><include>*.crt</include></includes></resource></resources><outputDirectory>${project.build.directory}/roma/cert/</outputDirectory></configuration></execution><execution><id>copy-resources4</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><resources><resource><directory>${project.build.directory}</directory><includes><include>*.jar</include></includes></resource></resources><outputDirectory>${project.build.directory}/roma/</outputDirectory></configuration></execution></executions></plugin></plugins></build>
</project>
这里只介绍一下不同的部分,相同的部分,参看前面一篇
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><execution><id>copy-dependencies</id><phase>prepare-package</phase><goals><goal>copy-dependencies</goal></goals><configuration><outputDirectory>${project.build.directory}/roma/lib</outputDirectory><overWriteReleases>false</overWriteReleases><overWriteSnapshots>false</overWriteSnapshots><overWriteIfNewer>true</overWriteIfNewer><includeScope>compile</includeScope><excludeScope>test</excludeScope><excludeArtifactIds>junit-jupiter,junit-jupiter-api,junit-jupiter-engine,junit-jupiter-params,junit-platform-commons,junit-platform-engine</excludeArtifactIds></configuration></execution></executions>
</plugin>
maven-dependency-plugin插件将项目的依赖库复制到一个指定的目录中,指定的目录配置到outputDirectory即可。excludeScope表示将test的依赖排除掉,也可以在excludeArtifactIds中指定特定的依赖。
然后编译打包的时候,只需执行maven clean package即可。