maven多环境配置打包分析

maven+springboot打包

在spring打包时其实是用的maven的环境参数,springboot默认有自己的环境配置,springboot默认找自己路劲下的配置文件
具体看org.springframework.boot.context.config.ConfigFileApplicationListener.Loader#loadForFileExtension类中的加载和实现
maven的相关操作是将文件打包到springboot需要的路径下,这样可以在不同的环境下可以使用不同的配置文件。
具体的maven配置如下


        
            dev
            
                dev
            
            
                true
            
        
        
            pro
            
                pro
            
        
    
    
        
            
               
                ${basedir}/profiles
                
                true
                
                   
                    application-${spring.atcive}.yml
                
                ${basedir}/target/classes
            
            
                ${basedir}/src/main/resources
                true
                
                   
                    application.yml
                
                
                	
                    bootstrap.yml
                
            
        
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

如果开发工具可以选择对应的profile项,如果是用命令执行可以参考如下maven命令, -P pro就是告诉maven要使用名字为pro的profile来打包,即所有的配置文件都使用生产环境(prod是自己定义的,在这里自定义为生产环境)。

//指定打包生产环境配置
 mvn clean package -Dmaven.test.skip=true -P prod

maven结合springboot的profile功能

maven支持profile功能,当使用maven profile打包时,可以打包指定目录和指定文件,且可以修改文件中的变量。spring boot也支持profile功能,只要在application.properties文件中指定spring.profiles.active=xxx 即可,其中xxx是一个变量,当maven打包时,修改这个变量即可。

常见问题

打包后的jar不能执行

配置打包插件

<plugins>
<!-- Spring boot maven 打包插件 -->
	<plugin>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-maven-plugin</artifactId>
	</plugin>
</plugins>

clean package之后
执行启动java -jar project.jar时候报错说“没有主清单属性”,调整项目的打包

<plugins>
<!-- Spring boot maven 打包插件 -->
	<plugin>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-maven-plugin</artifactId>
		<!--repackage:创建一个自动可执行的jar或war文件。它可以替换常规的artifact,或者用一个单独的classifier附属在maven构建的生命周期中。-->
		<executions>
			<execution>
				<goals>
					<goal>repackage</goal>
				</goals>
			</execution>
		</executions>
	</plugin>
</plugins>
执行clean package

打包后的编译文件不是自己想要的

这个可以调整maven的配置,看看是不是自己没有完全理解配置文件中的配置的意思。


        
            
               
                ${basedir}/profiles
                
                true
                
                   
                    application-${spring.atcive}.yml
                
                ${basedir}/target/classes
            
            
                ${basedir}/src/main/resources
                true
                
                   
                    application.yml
                
                
                	
                    bootstrap.yml
                
            
        
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

maven+普通spring项目

打包为war包,操作和上述的一样。


        cn-appoint
        
            
                src/main/resources
                true
                
                    **/*.properties
                    **/*.xml
                
            
        
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    1.8
                    1.8
                    UTF-8
                
            
            
            
                org.apache.maven.plugins
                maven-war-plugin
                
                    true
                
            
            
        
    
    
        
            
            development
            
                
                    profiles/filter-development.properties
                
            
            
                true
            
        
        
            
            prerelease
            
                
                    profiles/filter-prerelease.properties
                
            
        
        
            
            production
            
                
                    profiles/filter-production.properties
                
            
        
    

你可能感兴趣的:(maven)