`

用 maven filter 管理不同环境的配置文件

    博客分类:
  • java
 
阅读更多

使用 maven profile

 

一个项目可以部署在不同的环境当中,maven 的 profile 针对不同的环境指定各自的编译方法。在 pom.xml 的 profile 中,可以根据不同的环境定制以下内容:

  • <repositories>
  • <pluginRepositories>
  • <dependencies>
  • <plugins>
  • <properties>
  • <dependencyManagement>
  • <distributionManagement>
  • <build>
    • <defaultGoal>
    • <resources>
    • <testResources>
    • <finalName>

可以设置默认激活的 profile

<profiles>
  <profile>
    <id>profile-1</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    ...
  </profile>
</profiles>

 

build 配置项

 

build 配置项可以在两处出现:

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                      http://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <!-- 项目级别的构建,基础配置 -->
  <build>...</build>

  <profiles>
    <profile>
      <!-- 特殊的构建 -->
      <build>...</build>
    </profile>
  </profiles>
</project>

以下是 build 的详细配置

<build>
  <defaultGoal>install</defaultGoal>
  <directory>${basedir}/target</directory>
  <finalName>${artifactId}-${version}</finalName>
  <filters> <!-- 过滤器,用于过滤resource中的各个文件 -->
    <filter>filters/filter1.properties</filter>
  </filters>
  <resources>
    <resource>
      <targetPath>META-INF/plexus</targetPath>
      <filtering>false</filtering> <!-- 是否使用过滤器 -->
      <directory>${basedir}/src/main/plexus</directory>
      <includes>
        <include>configuration.xml</include>
      </includes>
      <excludes>
        <exclude>**/*.properties</exclude>
      </excludes>
    </resource>
  </resources>
  <testResources>
    ...
  </testResources>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>2.0</version>
      <extensions>false</extensions> <!-- 是否使用扩展 -->
      <inherited>true</inherited> <!-- 是否可继承 -->
      <configuration> <!-- 当前插件的配置 -->
        <classifier>test</classifier>
      </configuration>
      <dependencies>...</dependencies>
      <executions> <!-- 配置插件在哪个阶段使用 -->
        <execution>
          <id>echodir</id>
          <goals>
            <goal>run</goal>
          </goals>
          <phase>verify</phase>
          <inherited>false</inherited>
          <configuration>
            <tasks>
              <echo>Build Dir: ${project.build.directory}</echo>
            </tasks>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
  <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
  <scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>
  <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
  <outputDirectory>${basedir}/target/classes</outputDirectory>
  <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
  <extensions> <!-- 通过扩展来修改插件的行为 -->
    <extension>
      <groupId>org.apache.maven.wagon</groupId>
      <artifactId>wagon-ftp</artifactId>
      <version>1.0-alpha-3</version>
    </extension>
  </extensions>
</build>

 

filter 规则

 

maven 通过过滤器来修改部署时的不同配置。部署时的所有资源的配置,如果根据环境不同,有不同的配置,则需要在资源中加上以下形式的标记:

${tag.subtag}

如,在 spring.xml 中要配置上传文件的路径:

<beans>
  <bean id="uploadService" class="com.oist.project.service.UploadServiceImpl">
    <property name="uploadDir" value="${spring.uploadDir}"/>
  </bean>
</beans>

在 pom.xml 中进行以下配置:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <build>
    <filters> <!-- 指定 filter -->
      <filter>src/main/filters/${deploy.env}.properties</filter>
    </filters>
    <resources>
      <resource> <!-- spring.xml 应该在 src/main/resource 目录下 -->
        <filtering>true</filtering> <!-- 是否使用过滤器 -->
      </resource>
    </resources>
  </build>

  <profiles>
    <profile>
      <id>development</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <propertys>
        <deploy.env>develop</deploy.env>
      </propertys>
    </profile>

    <profile>
      <id>test</id>
      <propertys>
        <deploy.env>test</deploy.env>
      </propertys>
    </profile>

    <profile>
      <id>production</id>
      <propertys>
        <deploy.env>production</deploy.env>
      </propertys>
    </profile>

  </profiles>
</project>

然后就可以针对不同的环境设置不同的目录了:

src/main/filters/develop.properties 文件

# 上传路径:
spring.uploadDir=c:/uploadDir

src/main/filters/test.properties 文件

# 上传路径:
spring.uploadDir=/tmp/upload_dir

src/main/filters/production.properties 文件

# 上传路径:
spring.uploadDir=/app/project/upload_dir

如果配置了多个 filter,并且两个 filter 中有相同的 key,则后面的 value 为最终取值。

<build>
  <filters>
    <filter>src/main/filters/production.properties</filter>
    <filter>src/main/filters/test.properties</filter>
  </filters>
</build>

如以上的配置,因为 test.properties 在最后,因而 spring.uploadDir 为 test.properties 的取值 /tmp/upload_dir

 

maven 的 properties 加载顺序

 

  1. <build><filters> 中的配置
  2. pom.xml 中的 <properties>
  3. mvn -Dproperty=value 中定义的 property

相同 key 的 property,以最后一个文件中的配置为最终配置。

利用这一规则,可以在打升级 war 包的时候,不将 lib/*.jar 打进 war 包。

<project>
  ...
  <properties>
    <lib.exclude>abc.jar</lib.exclude>
  </properties>
  ...
  <build>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <version>2.3</version>
      <configuration>
        <packagingExcludes>WEB-INF/lib/${lib.exclude}.jar</packagingExcludes>
      </configuration>
    </plugin>
  </build>
</project>

打第一个 war 包的时候,可以使用以下命令:

mvn clean compile war:war -Pproduction

今后要升级,不用再把 lib 打进 war 包(这样可以使得 war 包体积减少很多),可以使用以下的命令:

mvn clean compile war:war -Pproduction -Dlib.execlude=*
分享到:
评论

相关推荐

    Intellij IDEA中使用maven filter遇到的问题

    在给定的文件列表中,`pom.xml`是Maven项目的配置文件,可能包含Filter的配置;而`src`目录通常包含源代码和资源文件,其中的资源文件可能会用到Maven Filter。分析这些文件可以帮助我们定位问题所在,修复配置或...

    Springboot与Maven多环境配置文件夹解决方案.docx

    本文介绍了如何使用 SpringBoot 和 Maven 实现多环境配置文件夹解决方案,使用 Profile 功能来加载不同的配置文件,使用 Resources 和 Filter 来指定打包内容和替换变量,选择当前环境,加载对应的配置文件。

    Maven配置图文教程

    3. 集成Maven插件:在MyEclipse中,配置Maven插件路径,选择用户设置文件,指定到Maven的settings.xml。 四、新建Maven项目 1. 创建项目:在MyEclipse中,选择“New Project”,然后选择“Maven Project”。在...

    上手提示:使用新版IDEA+Maven+Scala编写Spark程序

    通过上述步骤,我们不仅了解了如何在IDEA 2017版中创建Scala项目并使用Maven管理依赖,还学会了如何利用IDEA的内置功能来提高开发效率。Scala与Spark的结合为大数据处理带来了极大的便利,而IDEA作为一款强大的集成...

    maven servlet 3.0 eclipse config video

    4. **配置pom.xml**: pom.xml是Maven项目的配置文件,用于定义项目属性、依赖关系、插件等。根据需求,添加相应的依赖项,如Servlet API。 **Servlet 3.0配置** 1. **Servlet 3.0特性**: Servlet 3.0引入了注解配置...

    使用Maven搭建S2SH工程详解一:使用Maven创建struts2工程

    【使用Maven搭建S2SH工程详解一:...这个过程涵盖了Maven的项目管理、Struts2的请求处理、Jetty的本地开发服务器使用,以及Web应用的基础配置。通过这种方式,我们可以快速地启动一个S2SH项目,并进行后续的开发工作。

    maven构建分级权限管理的damo

    首先,Maven是Java项目管理的一个工具,它通过XML文件(pom.xml)管理项目的依赖关系、构建过程和配置信息。在构建权限管理的示例项目时,Maven可以帮助我们整合各种库,如Shiro,以及其他的业务逻辑组件,使得项目...

    maven 简单实用的配置,打包,获取svn版本号

    maven 简单实用的配置,打包,获取svn版本号、仓库等等实用

    使用maven 部署环境 mvc模式 实现 登录 退出登录注册 过滤和监听的功能

    Maven是Apache组织提供的一个项目管理工具,通过XML配置文件管理项目的构建、报告和依赖关系。首先,我们需要在本地安装Maven,并配置Maven的`settings.xml`文件,添加远程仓库地址,以便下载所需的依赖库。 2. **...

    Maven新建打包等管理Eclipse标准动态Web工程

    在创建过程中,我们可以选择让Eclipse自动将项目配置为Maven项目,这会自动生成pom.xml文件,它是Maven项目的核心配置文件。 pom.xml文件包含了项目的元数据,如项目名称、版本、描述、开发者信息,以及项目依赖。...

    maven2 使用手册

    Maven通过XML格式的配置文件(pom.xml)来描述项目信息、依赖关系以及构建指令,使得开发人员可以轻松地管理和维护多个项目。 ### Maven 基础概念 1. **Project Object Model (POM)**: Maven 的核心是POM,它是一个...

    Spring+Maven+Dubbo+MyBatis+Linner+Handlebars企业化Web开发环境搭建

    - **环境配置文件**: 包括`filter-dev.properties`(开发环境)、`filter-test.properties`(测试环境)和`filter-pro.properties`(生产环境)。这些配置文件定义了不同的运行参数,例如数据源配置、系统URL、日志...

    Maven整合SSM示例

    3. 创建配置文件:包括Spring的applicationContext.xml,SpringMVC的servlet-context.xml,MyBatis的mybatis-config.xml,以及数据库连接相关的配置。 4. 编写实体类、Mapper接口、Mapper XML文件:定义数据库表对应...

    ssm+maven+shiro

    总结来说,"ssm+maven+shiro"项目是一个完整的Java Web应用示例,它展示了如何使用Spring、Spring MVC和MyBatis构建业务逻辑,通过Maven进行项目管理,以及利用Apache Shiro实现安全控制。这样的项目结构和实践,...

    ssm框架所需配置文件

    - `pom.xml`:如果你的项目使用Maven构建,这个文件会列出所有依赖,管理项目的构建过程。 在实际开发中,根据项目需求,配置文件可能会有所扩展,例如添加缓存配置、安全配置、邮件服务配置等。理解并正确配置...

    maven+spring+cxf webservice demo

    通过这个项目,开发者可以学习到如何使用Maven进行项目构建,如何在Spring环境中配置和管理Web服务,以及如何利用CXF提供的工具和服务来实现和部署Web服务。此外,对于测试和调试,可以参考测试代码和可能使用的代理...

    maven的打包、jetty配置、jetty事务检查、打包除resource之外的资源文件

    标题中的“maven的打包”指的是使用Maven构建工具对Java项目进行编译、测试、打包的过程。在Java开发中,Maven通过读取项目的pom.xml文件来管理依赖、构建流程和项目信息。打包过程通常包括编译源代码、运行测试、...

    java框架maven的demo

    Maven是Apache软件基金会开发的一个项目管理和综合工具,它通过一个XML配置文件管理项目的依赖关系,构建流程以及发布形式。SpringMVC是Spring框架的一部分,用于处理Web请求,而MyBatis则是一个优秀的持久层框架,...

    maven搭建SpringMVC+spring+ibatis

    首先,Maven是一个项目管理和综合工具,它通过一个配置文件(pom.xml)管理项目的依赖关系,构建流程,以及打包和部署等任务。使用Maven,你可以轻松地导入和管理所需的库,避免了手动下载和配置的繁琐过程。Maven的...

    maven搭建 SpringMVC+mybatis

    在构建Java Web应用程序时,`Maven`、`SpringMVC`和`MyBatis`是常见的技术栈,它们各自负责不同的职责。`Maven`是项目管理和构建工具,`SpringMVC`作为`Spring`框架的一部分,是用于处理Web请求的模型-视图-控制器...

Global site tag (gtag.js) - Google Analytics