`
vinson00
  • 浏览: 20329 次
文章分类
社区版块
存档分类
最新评论

maven根据不同环境打包

阅读更多

       构建项目是一个麻烦的事,因为项目运行的环境有开发,测试,生产环境等等。不同的环境下的各种配置又不一样。传统的做法是每当打一个war包时去根据它要运行的环境去修改相应的配置信息,但是人工改动是不可靠的,尤其是当配置信息很多的时候。数据库连接信息、redis配置信息、短信接口配置、其他依赖的服务地址等等,这么多的信息修改错了一项,项目都不能完全正常的运行了。幸运的是我们可以依赖maven的profile属性去配置好各种配置信息,在打包的时候只要指定一个参数就能够按照我们设想构建出相应环境下的war包。

假设这是Java的一个web项目,里面的数据库的配置信息会根据不同的运行环境变化而变化。

 

1. 添加会根据不同的环境变化的配置信息

我们的src/main/resources/jdbc.properties文件如下:

 

jdbc.driver=${profile.jdbc.driver}
jdbc.url=${profile.jdbc.url}
jdbc.name=${profile.jdbc.name}
jdbc.password=${profile.jdbc.password}
 这里我们用${name}这样的方式来替换上述配置中的value,比如${profile.jdbc.name}来替换了我的数据库用户名。这里的名称可以随意命名,只要和后续步骤中保存一致就可以。但是不要和spring配置中的一样,那样的话sping中配置就会在打包时也被替换成真实环境下的配置,虽然那样不影响运行,但是jdbc.properties就没有意义了。所以这里统一加上了profile.的前缀。

2. 添加profile属性

在pom.xml中添加如下配置信息:

	<profiles>
		<profile>
			<id>dev</id>
			<properties>
				<profile.jdbc.driver>com.mysql.jdbc.Driver</profile.jdbc.driver>
				<profile.jdbc.url>jdbc:mysql://localhost:3306/dev</profile.jdbc.url>
				<profile.jdbc.name>dev</profile.jdbc.name>
				<profile.jdbc.password>dev-password</profile.jdbc.password>
			</properties>
		</profile>
		<profile>
			<id>test</id>
			<properties>
				<profile.jdbc.driver>com.mysql.jdbc.Driver</profile.jdbc.driver>
				<profile.jdbc.url>jdbc:mysql://192.168.10.100:3306/test</profile.jdbc.url>
				<profile.jdbc.name>test</profile.jdbc.name>
				<profile.jdbc.password>test-password</profile.jdbc.password>
			</properties>
		</profile>
	</profiles>

 

上述配置添加了一个profiles属性,profiles下有两个profile配置,每个profile包含了id和properties两个属性,其中properties中可以包含各种我们想要配置的属性。这里我配置了在jdbc.properties有关数据库连接的信息。这里我们配置了dev和test两个profile,它们的数据库配置信息各不相同。

 

3. 添加profile属性

在pom.xml的build标签下中添加如下配置:

	<build>
		<finalName>maven-profile</finalName>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
			</resource>
		</resources>
	</build>

 关于resources这个标签的用途不是这里的重点,这里我们只关注我们配置的这两个属性:directory和filtering。上述配置是在src/main/resources这个资源文件目录下开启资源过滤的功能。

 

4. 打包构建

配置完上述三项之后,我们运行如下命令:

mvn clean install -P  dev

然后查看war包WEB-INF/classes/jdbc.properties:

jdbc.driver=com.mysql.profile.jdbc.Driver
jdbc.url=profile.jdbc:mysql://localhost:3306/dev
jdbc.name=dev 
jdbc.password=dev-password

 

这里的-P dev指定了开启该项目的一个profile,就是说我们第2步中配置的id为dev的这个profile的properties中的各项属性就会在这个项目中生效:

profile.jdbc.driver=com.mysql.profile.jdbc.Driver
profile.jdbc.url=profile.jdbc:mysql://localhost:3306/dev
profile.jdbc.name=dev
profile.jdbc.password=dev-password

所以jdbc.properties中的属性就会被替换掉。

 同理,我们在打包时可以通过替换-P来随意的切换我们的运行环境。

 

5. 配置默认的环境信息

通过以下配置,不用-P默认就是打包dev的配置信息:

		<profile>
			<id>dev</id>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
			<properties>
				<profile.jdbc.driver>com.mysql.profile.jdbc.Driver</profile.jdbc.driver>
				<profile.jdbc.url>profile.jdbc:mysql://localhost:3306/dev</profile.jdbc.url>
				<profile.jdbc.name>dev</profile.jdbc.name>
				<profile.jdbc.password>dev-password</profile.jdbc.password>
			</properties>
		</profile>

 

 

 

总结

我们在上述的第3步的配置中指定了在src/main/resources下开启了资源过滤,所以该目录下的相应的${name}属性就会被maven中的属性所代替.而通过-P我们激活了第2步中的相应的profile,该profile中的属性就可以被我们使用,所以在打包时我们在第1步中所配置的数据库信息就会根据${name}被替换成profile中的相应属性。

 

分享到:
评论

相关推荐

    maven多环境配置打包

    Maven作为Java项目管理的重要工具,提供了强大的多环境配置打包功能,帮助开发者有效地管理和构建项目,确保代码在不同环境下能够正确运行。 【描述】: 这篇博客(虽然描述为空,但可以通过提供的链接进一步了解...

    springboot实现maven打包加载不同环境的方式二

    当前案例中包含一整套的代码和word文档,非常适合新手... 主要是通过maven打包加载不同环境的properties文件 然后将对于的属性绑定到指定的实体对象中;然后通过调用接口可以看到加载不同环境控制台打印的内容是不一样的

    SpringBoot项目使用maven-assembly-plugin根据不同环境打包成tar.gz或者zip

    在实际项目中,我们往往需要根据不同的部署环境(如开发、测试、生产)创建定制化的打包文件。`maven-assembly-plugin`是Maven的一个插件,用于生成项目的归档文件,如tar.gz或zip,这在分发和部署软件时非常有用。...

    springboot实现maven打包加载不同环境的方式一

    当前案例中包含一整套的代码和word文档,非常适合新手代码简单易懂; 主要是通过maven打包配合springboot application.properties文件配置实现通过打包来完成加载不同环境的配置内容;

    maven 过滤文件夹打包

    "maven 过滤文件夹打包"这个主题涉及到的是如何利用Maven的资源过滤功能来实现针对不同运行环境的配置文件打包。下面将详细解释这一过程。 在开发环境中,我们通常会有多种配置文件,比如`application-dev....

    maven+bat打包

    "maven+bat打包"是指使用Apache Maven,一个流行的Java项目管理工具,结合批处理脚本(BAT)来自动化项目的打包过程。这种方式可以极大地提高开发效率,确保每次构建的一致性和可重复性。下面将详细介绍这个过程及其...

    基于Maven+SVN自动打包

    6. **部署**:最后,自动打包的产物可以被部署到测试环境或生产环境,这通常通过Maven的部署插件或者额外的部署脚本来完成。 总结来说,"基于Maven+SVN自动打包"是一种高效的开发实践,它整合了两个强大的工具,...

    maven3.5.4打包文件

    ** Maven 3.5.4 打包工具详解 ** Maven 是一个强大的项目管理和构建工具,主要用于Java项目。它通过使用一种标准的项目对象模型(Project Object Model, POM),自动化构建过程,管理依赖关系,并执行各种生命周期...

    maven 占位符打包

    标题“maven 占位符打包”指的是在Maven的POM.xml文件中使用特定的占位符,以便在不同环境中替换为相应的配置值。这样可以实现代码的复用和环境的隔离,提高开发效率并降低出错的可能性。 描述中的“工程运行环境有...

    使用maven profile指定配置文件打包适用多环境的方法

    使用maven profile指定配置文件打包适用多环境的方法 ...使用Maven Profile指定配置文件打包适用多环境的方法是一种非常实用的方法,能够帮助开发者轻松地在不同的环境中切换配置文件,避免了频繁修改配置文件的麻烦。

    Maven打包实战.zip

    在Eclipse这样的集成开发环境(IDE)中,也可以通过配置Maven插件,实现一键打包。 在实际操作中,我们需要在项目的`pom.xml`文件中定义打包的相关设置。例如,我们可以设置打包类型(`&lt;packaging&gt;`元素,如`jar`、...

    maven打包出错解决办法,亲测绝对可以!

    安装Nexus,根据官方文档配置服务器环境,启动服务后,可以在Web界面中管理仓库。 3. **配置Maven指向私服**:在`settings.xml`文件中添加`servers`和`mirrors`配置,指明Nexus的地址。这样,Maven会首先尝试从私服...

    示例源码_SpringBoot踩坑记录:IDEA+MAVEN本地 jar 包打包及引入使用_Qc20201217.zip

    本示例源码是关于在使用IntelliJ IDEA(IDEA)和Maven时,如何打包SpringBoot项目为jar包,并进一步在本地引入和使用的详细步骤记录。这个压缩包包含了"打包前"和"打包后"两个阶段的文件,帮助开发者理解整个流程。 ...

    springboot+maven打包demo【将依赖与配置文件打包到jar包外部】

    这个方法对于那些需要根据不同环境进行定制配置或者频繁更新配置的应用来说尤其有用。下面我们将详细讲解相关知识点。 首先,让我们了解Spring Boot。Spring Boot是一个简化Spring应用初始搭建以及开发过程的框架。...

    maven 一键打包

    但在一键打包时,如果项目有多个环境(如开发、测试、生产),可能需要根据不同的环境配置文件。此时,可以通过Maven的profile功能,定义不同环境的配置,并在打包时选择相应的profile。 ### Maven profile Profile...

    Java+IDEA+Maven混淆打包

    本教程将详细讲解如何在IntelliJ IDEA(IDEA)中利用Maven进行混淆打包,确保代码的安全性并提高可维护性。 首先,让我们了解一下涉及的工具和技术: 1. **Java**: 一种广泛使用的面向对象的编程语言,用于构建跨...

    示例源码_SpringBoot踩坑记录:IDEA+MAVEN本地 jar 包打包及引入使用_Qc20201223.zip

    在本压缩包文件"示例源码_SpringBoot踩坑记录:IDEA+MAVEN本地 jar 包打包及引入使用_Qc20201223.zip"中,我们聚焦于SpringBoot项目开发过程中的一些常见问题,特别是涉及到IDEA(IntelliJ IDEA)和MAVEN的本地jar包...

    Spring Boot项目使用maven-assembly-plugin根据不同环境打包成tar.gz或者zip.zip

    同时,可以设置MAVEN_HOME环境变量,指向Maven的安装目录。 测试安装。打开命令提示符(或新的cmd窗口),输入mvn -version。如果显示Maven的版本信息,说明安装成功。 配置Maven本地仓库和中央仓库

Global site tag (gtag.js) - Google Analytics