How to activate maven profile inside eclipse
How to activate maven profile inside eclipse
Normally maven is use for project dependency management and lifecycle, so there are several developers working on it. Each has its own development environment either in windows, linux or mac. To do this we create several profiles for each developer in pom.xml.
<profiles>
<profile>
<id>windows</id>
<properties>
<jboss.home>C:/manaty/jboss-4.2.3.GA</jboss.home>
</properties>
</profile>
<profile>
<id>linux</id>
<properties>
<jboss.home>/home/project/jboss-4.2.3.GA</jboss.home>
</properties>
</profile>
</profiles>
And then invoke mvn with the -P argument. Example:
mvn install -Pwindows
mvn install -Plinux
How could we do the same inside eclipse. There are 2 ways: 1.) Right click on the project->click properties->select maven menu

If in case maven is not present, right click on project->Maven->Enable Maven Dependency 2.) Right click on project->Run As->Run Configurations->Maven Build->Add a new build (set profile and goal)

Maven 整合 spring profile实现多环境自动切换
profile主要用在项目多环境运行的情况下,比如开发环境、测试环境、线上生产环境。
我负责的项目某个数据管理后台涉及到包含测试环境在内的12个不同的运行环境,所以每次发布都很蛋疼很纠结,配置改过来改过去,到最后有些环境都忘了怎么配的。
下面以这个项目为例介绍。
准备条件:spring3.x、Maven 2
这里是整合spring的profile和Maven的profile功能
spring的profile配置
首先是spring的配置数据源和属性文件
- <beans profile="xmj_old">
- <bean id="dataSource"
- class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName" value="com.mysql.jdbc.Driver" />
- <property name="url"
- value="jdbc:mysql://127.0.0.1:3306/db1?characterEncoding=utf8" />
- <property name="password" value="123456" />
- <property name="username" value="abc" />
- </bean>
- <bean id="messageSource"
- class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
- <property name="basenames">
- <list>
- <value>classpath:messages_zh_CN</value>
- <value>classpath:messages/messages_en_US-xmj_old</value>
- </list>
- </property>
- </bean>
- </beans>
- <beans profile="xmj_new">
- <bean id="dataSource"
- class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName" value="com.mysql.jdbc.Driver" />
- <property name="url"
- value="jdbc:mysql://127.0.0.1:3306/db1?characterEncoding=utf8" />
- <property name="password" value="123456" />
- <property name="username" value="abc" />
- </bean>
- <bean id="messageSource"
- class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
- <property name="basenames">
- <list>
- <value>classpath:messages_zh_CN</value>
- <value>classpath:messages/messages_en_US-xmj_new</value>
- </list>
- </property>
- </bean>
- </beans>
- ...
- ...
- ...
- 这里的message_en_US-*系列属性文件是配置站点的名称和黑名单的位置:
- Java代码

- resource.blacklist.dir=/var/resource/blacklist.txt
- system.title.id=system.xmj_old.title
- 激活spring的profile
- profile是配置完了,但还要激活spring的profile特性。
- 在web.xml做如下配置:
- Xml代码

- <context-param>
- <param-name>spring.profiles.active</param-name>
- <param-value>xmj_old</param-value>
- </context-param>
- 这样就激活spring配置文件中的profile为xmj_old的配置,但这样手动配置依然要改web.xml配置。
- Maven也带了profile的功能,而且我们的项目一般都是由Maven管理的,下面介绍Maven配置profile。
- Maven 配置profile
- Maven配置profile也很简单,举例如下:
- Xml代码

- <profiles>
- <profile>
- <id>xmj_old</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <properties>
- <profiles.activation>xmj_old</profiles.activation>
- </properties>
- <build>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>tomcat-maven-plugin</artifactId>
- <version>1.1</version>
- <configuration>
- <!-- 配置项目自动发布服务器 -->
- <url>http://xx.xx.xx.xx:8080/manager/text</url>
- <path>/xmj-manager</path>
- <server>Tomcat</server>
- <warFile>target/${profiles.activation}.war</warFile>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </profile>
- <profile>
- <id>xmj_new</id>
- <properties>
- <profiles.activation>xmj_new</profiles.activation>
- </properties>
- <build>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>tomcat-maven-plugin</artifactId>
- <version>1.1</version>
- <configuration>
- <!-- 配置项目自动发布服务器 -->
- <url>http://xx2.xx.xx.xx:8080/manager/text</url>
- <path>/xmj-manager</path>
- <server>Tomcat</server>
- <warFile>target/${profiles.activation}.war</warFile>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </profile>
- ...
- ...
- ...
- </profiles>
- activeByDefault标签配置true表示默认激活的环境,直接install就是使用此配置的环境。
- 这里有一个自定义属性配置:profiles.activation 它就是整合Maven profile 和spring profile 的重要配置
- 整合Maven profile 和spring profile
- 通过Maven管理web实现自动化,少改动就少出错,将上面web.xml配置改为下面的:
- Xml代码

- <context-param>
- <param-name>spring.profiles.active</param-name>
- <param-value>${profiles.activation}</param-value>
- </context-param>
- 这还不算完,还要配置Maven的一个插件:
- Xml代码

- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-war-plugin</artifactId>
- <configuration>
- <warName>${profiles.activation}</warName>
- <!-- 激活spring profile -->
- <webResources>
- <resource>
- <filtering>true</filtering>
- <directory>src/main/webapp</directory>
- <includes>
- <include>**/web.xml</include>
- </includes>
- </resource>
- </webResources>
- <warSourceDirectory>src/main/webapp</warSourceDirectory>
- <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
- </configuration>
- </plugin>
- 打包的时候Maven会去自动修改web.xml文件,根据占位符自动替换为对应的属性值
- warName标签可以不配置,我这里加上了所以需要加上前面的target/${profiles.activation}.war,否则会报找不到war包的异常。
- 执行profile
- 下面是见证奇迹的时刻
- 在eclipse中执行命令:
- Java代码

- clean install
- 前面配置的默认环境是xmj_old这个,在执行完命令之后target文件夹下面出现了一个名为xmj_old.war的war包

- 打开war包查看web.xml

- 再测试下切换到其他的环境
- 执行命令
- Java代码

- clean install -P xmj_new
- -P 参数后面加上profile的id即可完成自动切换,执行完之后看下是否已经自动切换到id为xmj_new的profile环境下
- target文件下有了xmj_new.war的war包(xmj_old.war被clean掉了)

- 打开war包查看web.xml文件

- 如预期所料,Maven结合spring成功的完成了多环境的自动切换
- 注:上面web.xml中的display-name和webAppRootKey都是使用占位符${profiles.activation}然后Maven自动替换的,如果你的项目中使用log4j/logback和spring,然后同一个项目部署多个实例到一个tomcat中,建议配置webAppRootKey这个参数
- 请参考 log4j/logback + spring的webRootKey bug
- 在本地eclipse内置tomcat中运行
- 由于内置tomcat是直接编译源码然后放到指定的位置去加载
- 所以上述的方法对于在内置tomcat运行是行不通的,在本地测试就非常蛋疼了
- 网上说有设置项目属性中Maven的profile,查了下eclipse官网说是由于m2eclipse有bug的问题,这个配置已经给禁用了
- 那就要另觅他法了,下面介绍一种探索出的一个方法:
- 首先在main目录下新建一个profile文件夹,将WEB-INF下面的web.xml复制过来一份
- 然后将WEB-INF下面的web.xml中的占位符修改成默认的配置(即没有占位符的,在本地测试用的profile值)
- profile文件夹下保留占位符的web.xml配置

- 下面是WEB-INF下面没有占位符的正常的配置

- 这些占位符我都换成了ysxj
- 接下来修改Maven配置
- 将配置:
- Xml代码

- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-war-plugin</artifactId>
- <configuration>
- <warName>${profiles.activation}</warName>
- <!-- 激活spring profile -->
- <webResources>
- <resource>
- <filtering>true</filtering>
- <directory>src/main/webapp</directory>
- <includes>
- <include>**/web.xml</include>
- </includes>
- </resource>
- </webResources>
- <warSourceDirectory>src/main/webapp</warSourceDirectory>
- <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
- </configuration>
- </plugin>
- 修改为:
- Xml代码

- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-war-plugin</artifactId>
- <configuration>
- <warName>${profiles.activation}</warName>
- <!-- 激活spring profile -->
- <webResources>
- <resource>
- <filtering>true</filtering>
- <!-- 这里是刚刚创建的目录 -->
- <directory>src/main/profile</directory>
- <!-- 目标目录为WEB-INF -->
- <targetPath>WEB-INF</targetPath>
- <includes>
- <include>**/web.xml</include>
- </includes>
- </resource>
- </webResources>
- <warSourceDirectory>src/main/webapp</warSourceDirectory>
- <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
- </configuration>
- </plugin>
- 最后见证奇迹
- 执行命令
- Java代码

- install -P naruto
- 在target下面出现根据profile打的war包naruto.war
- 接下来证明可以在eclipse的内置tomcat使用
- 执行命令
- Java代码

- eclipse:eclipse -Dwtpversion=1.5
- 编译成正常的eclipse工程,然后加入tomcat服务器,你会发现能运行成功。
- 这里tomcat使用的是源码中WEB-INF下的web.xml,即刚才将占位符修改为ysxj的那个web.xml
- 其原理就是在编译阶段将profile文件夹下的web.xml中的占位符替换成Maven中配置的属性,然后覆盖WEB-INF下面的web.xml
- 这种方法麻烦的一点就是如果web.xml文件有修改 ,两个记得要同步,一般情况下这个文件也极少动
- ps. 骚年们不要手动了,来玩自动的吧
How to activate maven profile inside eclipse的更多相关文章
- 在eclipse激活maven profile配置
profile简介 profile可以让我们定义一系列的配置信息,然后指定其激活条件.这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同 ...
- 使用maven profile实现多环境可移植构建(转自CSDN)
使用maven profile实现多环境可移植构建 标签: maven profilemaven自动构建maven自动部署maven可移植构建持续集成 2014-04-25 23:37 26905人阅 ...
- 有关使用Maven常见问题总结(Eclipse中使用Maven、Maven项目部署到tomcat等问题)
http://blog.csdn.net/sunitjy/article/details/42709311 ********************************************** ...
- maven profile实现多环境配置
每次项目部署上线都需要手动去修改配置文件(比如数据库配置,或者一个自定义的配置)然后才能打包,很麻烦,网上找到 maven profile可以完成这个工作,记录如下: 环境:eclipse + spr ...
- CAS (13) —— CAS 使用Maven Profile支持多环境编译
CAS (13) -- CAS 使用Maven Profile支持多环境编译 摘要 CAS 使用Maven Profile支持多环境编译 版本 tomcat版本: tomcat-8.0.29 jdk版 ...
- maven之一:maven安装和eclipse集成
maven作为一个项目构建工具,在开发的过程中很受欢迎,可以帮助管理项目中的bao依赖问题,另外它的很多功能都极大的减少了开发的难度,下面来介绍maven的安装及与eclipse的集成. maven的 ...
- 项目实现不同环境不同配置文件-maven profile
最近接触的项目都是在很多地方都落地的项目,需要支持不同的环境使用不同的配置文件.一直以来都以为是人工的去写不同的配置文件,手动的去修改运用的配置文件.感觉自己还是太low呀.maven的使用的还停留在 ...
- maven环境配置+eclipse环境配置
一 . (1),下载maven 有点类似于tomcat 解压后就可以用 ,不用安装 (2), 配置环境变量 在系统变量的path 中添加 E:\01Server\maven\bin 注意是bi ...
- [Maven] - 安装与Eclipse搭建
Maven的具体参考书可以看:<Maven实战> 下载maven可以到:http://maven.apache.org/ Maven的eclipse基本使用可以在这里看到:http://w ...
随机推荐
- 【JAVA】【NIO】10、Java NIO ServerSocketChannel
Java NIO的ServerSocketChannel是用来监听外来TCP连接的channel,就想标准Java网络中的ServerSocket.实比例如以下: ServerSocketChanne ...
- 树形dp hdu-4616-Game
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4616 题目大意: 给一棵树,每个节点有一个礼物值及是否有trick,每来到一个节点必须拿礼物,如果该 ...
- vue常用属性解释。
props:详看 示例-网格组件. props 可以是数组或对象,用于接收来自父组件的数据.props 可以是简单的数组,或者使用对象作为替代,对象允许配置高级选项,如类型检测.自定义校验和设置默认值 ...
- Oracle 检索数据
SELECT * | { [ DISTINCT ] column | expression [ alias ] , ... } FROM ta ...
- iterator [ɪtə'reɪtə] 遍历器
lterator 遍历器 遍历器是一种接口,它为不同的数据结构提供了统一的访问机制. 如果一个数据结构具有遍历器接口,那么就可以依次处理该数据结构的成员. 当前 javascript 用来表示集合的数 ...
- JDBC 关于Date格式
package test; import java.sql.Connection; import java.util.Date; import java.sql.PreparedStatement; ...
- C3P0连接参数解释
<c3p0-config> <default-config> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: 3 --> < ...
- 每秒处理3百万请求的Web集群搭建-为最佳性能调优 Nginx
这篇文章是<打造3百万次请求/秒的高性能服务器集群>系列的第2部分,在这个部分中你可以使用任何一种 WEB 服务器,不过我决定使用 Nginx,因其轻量级.高可靠及高性能的优点. 通常来说 ...
- Uva 10815-Andy's First Dictionary(串)
Problem B: Andy's First Dictionary Time limit: 3 seconds Andy, 8, has a dream - he wants to produce ...
- Hive 指定分隔符,将表导出到本地
hive表的数据源有四种: hbase hdfs 本地 其他hive表 而hive表本身有两种: 内部表和外部表. 而hbase的数据在hive中,可以建立对应的外部表(参看hive和hbase整合) ...