Maven jar profile 多环境

简言

为了减少开发人员反复修改配置,考虑在旧项目(非springboot)中使用 maven profile,在此记录下实现过程。

修改记录

  1. 之前直接使用 POM 中的 标签来控制文件覆盖不稳定,时灵时不灵。导致测试、生产环境jar包内配置文件不正确。现在纠正为使用resource插件,如果给读到的读者带来了疑惑,请多谅解。

  2. 由 copy-resource 改为 antrun。

实现过程

1.profiles

在pom文件中加入profiles配置。根据项目的需要,我配置3个profile节点,分别对应开发、测试和生产3种环境。代码如下:


    
        
            default
            
                src/main/filters/conf/local
            
            
                true
            
        
        
            test
            
                src/main/filters/conf/test
            
        
        
            production
                
                src/main/filters/conf/production
            
        
    

简单解释下代码中各个节点:

  1. id节点自定义,定义什么,使用打包命令时就用什么。如test,打包时就是用mvn package -Ptest
  2. properties下属子节点自定义,名称自定义,结合下文中的 使用。子节点多少视项目实际情况而定。
  3. activation 缺省设置,如果直接使用mvn package时,默认会使用defaule节点下的配置文件。如果不设置此节点,那么使用打包命令时需要显示执行id。

加入这段代码的目的是:在打包时,将目标环境对应目录下的配置文件覆盖项目原有的配置文件,以此来达到自动修改文件。举例说明下,通过mvn package -Ptest打包,目标环境为test。那么在打包的时候,会使用test定义的目录,即src/main/filters/conf/test。然后,会将该目录下的配置文件覆盖项目原有的配置文件。

2.build

定义过 profiles 后,就需要定义 build 节点内容了。两者的关系就是后者调用前者。

  
        ${project.artifactId}-${project.version}
        
            
                src/main/java
            
            
                src/main/resources
                                
                    db/*
                    *config.properties
                    *spring.xml
                
            
            
                src/main/filters
                
                    conf/local/*
                    conf/production/*
                    conf/test/*
                
            
        
        
            
                maven-resources-plugin
                3.1.0
                
                    
                        copy-resources
                        prepare-package
                        
                            copy-resources
                        
                        
                            ${basedir}/target/classes
                            
                                
                                    ${package.environment.conf}
                                    true
                                
                            
                        
                    
                
            
        
    

2.1 copy-resource

下面的代码就是对 profiles 节点定义内容的调用:

prepare-package

    copy-resources


    ${basedir}/target/classes
    
        
            ${package.environment.conf}
            true
        
    

${package.environment.conf} 配置就是打包命令中指定的profile节点中定义属性的目录。举个例子:
“mvn package -Ptest”,使用此打包命令时,会先去找对应的profile节点,即:


    test
    
        src/main/filters/conf/test
    

找到节点后,${package.environment.conf} 会引用 package.environment.conf 所定义的内容,即:src/main/filters/conf/test

2.2 phase

翻译为阶段,即在什么时候将 test 环境下的文件覆盖原来的配置文件,在这里为了保证打包时能选择正确的配置文件,设置为打包准备阶段,即 prepare-package

2.3 outputDirectory

就是目标文件夹,即要将src/main/filters/conf/test目录下的文件,放到${basedir}/src/main/resources下,${basedir} 就是项目文件夹的根路径。

2.4 copy-resource 改为 antrun

项目背景

项目达成jar包后,被其他项目模块引用了。所以使用 IDEA 时需要开启 maven 委托,maven 配置才能生效,打包时间略长且不能使用 JRebel,给开发带来不便。所以根据实际需要改为使用 antrun 插件的 copy 来达到相同的目的。


    
        org.apache.maven.plugins
        maven-antrun-plugin
        
            
                prepare-copy-resources
                package
                
                    run
                
                
                    
                        
                        
                    
                
            
        
    

结语

至此,项目工程打包时,通过指定profile自动修改配置文件的目的已经实现。

你可能感兴趣的:(Maven jar profile 多环境)