(1)开发
(2)测试
(3)沙箱
(4)灰度
(5)线上
当然这只是理论上的,搞这么多环境的目的只有一个,就是尽量防止或减少在生产环境出问题,所以往往你的项目或代码都要在每一套环境上
跑一遍确定是没有问题的。
小公司一般都有3套环境,开发,测试,线上,不同的环境我们的一些链接资源可能是不一样的,比如说,数据库的地址,某些集群的地址,比如ElasticSearch,Solr,Hadoop,Hbase,Zookeeper等 等,不同的环境的参数是不一样的,如果我们只有一个配置文件,那可能需要改来改去,而且还可能会出问题,maven提供了标准的目录配置,我们可以在src/main/filters下,放入我们的所有环境的配置,当然要约定一个暗号,通常是xxxx-dev{product,test}.properties等等,这里我们模拟3套环境做个demo:
上面的配置文件准备好后,我们还需要在pom文件里面,加入filter和profile配置:
<build> <!--指定下面的目录为资源文件--> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*</include> </includes> </resource> <!--设置自动替换--> <resource> <directory>src/main/resources</directory> <includes> <include>index-config.properties</include> </includes> <!--也可以用排除标签--> <!--<excludes></excludes>--> <!--开启过滤--> <filtering>true</filtering> </resource> </resources> </build>
最后在加入
<profiles> <!--默认激活开发配置,使用index-dev.properties来替换实际的文件key--> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <build> <filters> <filter>src/main/filters/index-dev.properties</filter> </filters> </build> </profile> <!-- 测试环境配置 --> <profile> <id>test</id> <build> <filters> <filter>src/main/filters/index-test.properties</filter> </filters> </build> </profile> <!-- 生产环境配置 --> <profile> <id>product</id> <build> <filters> <filter>src/main/filters/index-product.properties</filter> </filters> </build> </profile> </profiles>
在实际打包的时候,可以指定以哪个环境的配置文件编译打包,例如:
以开发环境打包:mvn clean package -Pdev
以测试环境打包:mvn clean package -Ptest
以生产环境打包:mvn clean package -Pproduct
如何将maven项目依赖外部的jar打成一个单独的jar包呢?,非常简单,在pom文件中加入下面的一段代码:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <mainClass>换成自己的主类</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-my-jar-with-dependencies</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>