Maven打包SpringBoot项目配置文件第三方依赖包外置

文章目录

    • 背景
    • 原始打包
    • SpringBoot读取配置文件(application.yml)的优先级
    • 配置文件和第三方jar包外置
    • 部署方式

背景

对于SpringBoot项目,我们可以直接使用Maven将项目打成一个可执行Jar包,上传到Linux服务器启动运行。

原始打包

对于打成单独一个jar包的情况,我们只需要引入打包插件,执行 mvn package即可

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-maven-pluginartifactId>
      plugin>
    plugins>
  build>

生成的jar包默认在 项目的编译目录的根目录下
Maven打包SpringBoot项目配置文件第三方依赖包外置_第1张图片

对于这种打包方式,配置文件和第三方依赖包都包含在jar包里,项目运行的过程中,需要改动配置文件的话需要重新打包并部署。

SpringBoot读取配置文件(application.yml)的优先级

  • jar包同级目录的config目录
  • jar包同级目录
  • classPath(即resources目录)的config目录
  • classPath目录

还有一种最高优先级的方式是项目启动时通过命令的方式指定配置文件:

java –jar -Dspring.config.location=xxx/xxx/xxxx.properties xxxx.jar

所以我们只需要把配置文件拷贝出来放到与jar包同级的config目录中即可

配置文件和第三方jar包外置

所以我们只需要配置 配置文件的打包位置为jar包同级的config目录,并将jar包内的配置文件剔除即可

打包方式与原来无差别 执行 mvn package即可

    <build>
        <defaultGoal>compiledefaultGoal>

        <finalName>${project.artifactId}finalName>
        <resources>
            <resource>
                <directory>src/main/resourcesdirectory>
                <targetPath>${project.build.outputDirectory}targetPath>
                <filtering>falsefiltering>
            resource>

            <resource>
                <directory>src/main/resourcesdirectory>
                <targetPath>${project.build.testOutputDirectory}targetPath>
                <filtering>falsefiltering>
            resource>
            
            <resource>
                <directory>src/main/resourcesdirectory>
                <targetPath>${project.build.directory}/${project.artifactId}/configtargetPath>
                <includes>
                    <include>application.ymlinclude>
                    <include>application-dev.ymlinclude>
                    <include>application-test.ymlinclude>
                    <include>logback.xmlinclude>
                includes>
            resource>
        resources>


        <plugins>
            
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                
                <configuration>
                    <source>1.8source>
                    
                    <target>1.8target>
                    
                configuration>
            plugin>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-jar-pluginartifactId>
                <configuration>
                    <outputDirectory>${project.build.directory}/${project.artifactId}/outputDirectory>
                    
                    <excludes>
                        <include>application.ymlinclude>
                        <include>application-dev.ymlinclude>
                        <include>application-test.ymlinclude>
                        <include>logback.xmlinclude>
                    excludes>
                    <archive>
                        
                        <manifest>
                            <mainClass>com.shsnc.report.RunmainClass>
                            <addClasspath>trueaddClasspath>
                            <classpathPrefix>lib/classpathPrefix>
                            <useUniqueVersions>falseuseUniqueVersions>
                        manifest>
                        <manifestEntries>
                            <Class-Path>config/ .Class-Path>
                        manifestEntries>
                    archive>
                configuration>
            plugin>


            
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-dependency-pluginartifactId>
                <executions>
                    <execution>
                        <id>copy-dependenciesid>
                        <phase>packagephase>
                        <goals>
                            <goal>copy-dependenciesgoal>
                        goals>
                        <configuration>
                            
                            <outputDirectory>${project.build.directory}/${project.artifactId}/liboutputDirectory>
                            <excludeTransitive>falseexcludeTransitive>
                            <stripVersion>falsestripVersion>
                        configuration>
                    execution>
                executions>
            plugin>

            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-source-pluginartifactId>
                <executions>
                    <execution>
                        <phase>packagephase>
                        <goals>
                            <goal>jar-no-forkgoal>
                        goals>
                    execution>
                executions>
            plugin>

            
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-surefire-pluginartifactId>
                <configuration>
                    <skip>trueskip>
                configuration>
            plugin>
        plugins>
    build>

我们配置的jar包和配置文件在项目的编译目录下的/artifactId/下,打包完成后如图所示

Maven打包SpringBoot项目配置文件第三方依赖包外置_第2张图片

配置文件

Maven打包SpringBoot项目配置文件第三方依赖包外置_第3张图片

第三方依赖包

Maven打包SpringBoot项目配置文件第三方依赖包外置_第4张图片

部署方式

将打包时生成的jar包上级目录,我这里也就是ccic_report,压缩后上传到服务器,解压并进入目录
执行 java -jar xxx.jar即可

你可能感兴趣的:(工作日常,maven,spring,boot,jar)