SpringBoot打包时缺省情况下是生成一个完整的jar。但是这个jar会比较大,一般会有几百兆大小。因为这样把所有用到的其他jar都放进这个jar中了。那有没有办法将其他jar放到jar包外面呢?有的!
只需要在pom文件中加入
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.x.y.z.XyzApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<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>
<!--<includeScope>system</includeScope>-->
</configuration>
</execution>
</executions>
</plugin>
如果pom中有下面的plugin,需要去掉
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
这样打完包后,jar就很小,只有几百K,用到的其他jar都放在和这个jar同目录的lib目录下了。当然运行时,也要保持这个目录结构才行。就是要把这个jar和lib目录放到同一个目录下。运行时像下面一样运行即可
java -jar xyz.jar