Maven打包SpringBoot项目,排除第三方依赖包

问题背景

Spring Boot 项目一般会依赖较多的包括 Spring 在内的第三方 jar 包,直接打可运行 jar 包,文件大小往往会达到100M甚至更大;

一个包含数个业务模块的微服务项目,全部可运行的 jar 包加起来总共可达数百M甚至上G;

我们在重复部署测试或者生产环境的时候,每次都要上传包含所有依赖 jar 包的可运行 jar 文件,效率比较低;

期望目标

下面是经过验证的 maven 配置,Spring Boot 项目打包时,只包含我们自己的开发的代码内容,大小仅仅之后数百 kb,所依赖的第三方 jar 则复制到指定的目录下;

这样我们可以只需要上传一次第三方 jar,每次修改代码重新部署时,只上传仅包含我们开发代码的 jar 文件,大大提高了部署效率。

解决方法

maven 的 pom 配置如下,${} 变量根据自己的项目进行替换,第三方 jar 指定到 target/lib 目录下:

<plugins>
    <plugin>
        <artifactId>maven-compiler-pluginartifactId>
        <configuration>
            <source>${java.version}source>
            <target>${java.version}target>
            <encoding>UTF-8encoding>
        configuration>
    plugin>
    <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-surefire-pluginartifactId>
        <configuration>
            
            <skipTests>trueskipTests>
        configuration>
    plugin>

    <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-dependency-pluginartifactId>
        <executions>
            
            <execution>
                <goals>
                    <goal>copy-dependenciesgoal>
                goals>
                <configuration>
                    <outputDirectory>${project.build.directory}/liboutputDirectory>
                    <excludeScope>providedexcludeScope>
                configuration>
            execution>
        executions>
    plugin>
    <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-jar-pluginartifactId>
        <configuration>
            <archive>
                <manifest>
                    
                    <mainClass>${project.main.class}mainClass>
                    
                    <addClasspath>trueaddClasspath>
                    
                    <classpathPrefix>./lib/classpathPrefix>
                manifest>
            archive>
        configuration>
    plugin>
    <plugin>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-maven-pluginartifactId>
        
        <executions>
            <execution>
                <goals>
                    <goal>repackagegoal>
                goals>
            execution>
        executions>
        <configuration>
            <includes>
                <include>
                    <groupId>nothinggroupId>
                    <artifactId>nothingartifactId>
                include>
            includes>
        configuration>
    plugin>
plugins>

你可能感兴趣的:(Maven,Spring,Boot,java)