maven多环境配置与打包插件

maven多环境配置与打包插件

maven简略说明

Maven 本质上是一个项目管理和理解工具

Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成。

  • maven中基本的的内置变量如下

    变量名 路径
    ${project.xxx} 当前pom文件的任意节点的内容,如${project.packaging}pom中指定打包类型标签packaging
    ${basedir} 项目根目录
    ${project.parent.basedir} 按照上两条的规律,可理解成${project.xxx}+${basedir},即:父项目的根目录
  • apachepom-4.0.0.xml下定义的内置变量如下

    变量名 路径
    ${project.build.directory} ${project.basedir}/target
    ${project.build.outputDirectory} ${project.build.directory}/classes
    ${project.build.finalName} ${project.artifactId}-${project.version}
    ${project.build.testOutputDirectory} ${project.build.directory}/test-classes
    ${project.build.sourceDirectory} ${project.basedir}/src/main/java
    ${project.build.scriptSourceDirectory} ${project.basedir}/src/main/scripts
    ${project.build.testSourceDirectory} ${project.basedir}/src/test/java
    ${project.build.resources.resource.directory} ${project.basedir}/src/main/resources
    ${project.build.testResources.testResource.directory} ${project.basedir}/src/test/resources

maven多环境配置profiles

Maven多环境配置依赖于pom.xmlprofilesprofile指定的变量与激活条件

  • 多环境配置

    <!-- 环境信息 -->
    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <env>dev</env>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <env>test</env>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <env>prod</env>
            </properties>
        </profile>
    </profiles>

    其中,在mvncompilepackage等情况下,加上参数-P dev即激活profiles.profile.id对应的dev环境

  • springboot配置文件中,指定激活配置文件方式如下

    spring:
      profiles:
        active: @env@

    @env@指代pom.xmlprofiles.profile.properties指定的参数

    这样就会激活对应的配置文件

    application-dev.yml
    application-prod.yml
    application-test.yml

maven打包插件assembly

该插件可以将你想指定的东西塞到一起

  1. pom中引入插件

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.4</version>
        <executions>
            <execution>
                <id>assembly</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
                <configuration>
                    <descriptors>
                        <descriptor>${basedir}/src/main/assembly/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
            </execution>
        </executions>
    </plugin>
  2. ${basedir}/src/main/assembly/assembly.xml中的配置说明

    <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
        <id>auto-assembly</id>
        <formats>
            <format>tar.gz</format>
        </formats>
        <includeBaseDirectory>true</includeBaseDirectory>
    
        <fileSets>
            <!-- config files -->
            <fileSet>
                <directory>${project.build.directory}/classes/</directory>
                <excludes></excludes>
                <includes>
                    <include>application*.yml</include>
                </includes>
                <fileMode>0644</fileMode>
                <outputDirectory>/</outputDirectory>
            </fileSet>
            <!-- executable jar -->
            <fileSet>
                <directory>${project.build.directory}</directory>
                <includes>
                    <include>${project.artifactId}-${project.version}.jar</include>
                </includes>
                <fileMode>0755</fileMode>
                <outputDirectory>/</outputDirectory>
            </fileSet>
        </fileSets>
    </assembly>

    该插件新建了一个包,名字叫:

    ${project.artifactId}-${project.version}-${assembly.id}-${assembly.formats.format}

    fileSets中指定了两个fileSet

    application*.yml${project.artifactId}-${project.version}.jar放到了新包下。