Maven 是一个用于构建和管理 Java 项目的工具。它提供了一种标准化的项目结构和构建流程,可以自动化地处理项目的依赖管理、编译、测试、打包和部署等任务。
Maven 使用一个基于 XML 的配置文件(pom.xml)来描述项目的结构和依赖关系。
Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
POM(Project Object Model):项目对象模型
主要作用:
除了中央仓库(远程仓库)和本地仓库,Maven 还支持自定义远程仓库。你可以在项目的配置文件(pom.xml)中添加其他远程仓库的配置,以便下载非中央仓库中的依赖。例如,你可以添加私有仓库或第三方仓库的配置。
什么是坐标?
Maven坐标主要组成
Maven坐标的作用
1)Maven是使用Java编写的,使用Maven前,需要配置好JDK环境,配置好JAVA_HOME
2)下载Maven压缩包解压即安装成功
3)配置MAVEN_HOME
4)将MAVEN_HOME配置到环境变量Path下面,如 :
%MAVEN_HOME%/bin
5)查看Maven版本
Maven启动后,会自动保存下载到的资源(一般为jar包)到本地仓库
<localRepository>${user.home}/.m2/repositorylocalRepository>
打开${MAVEN_HOME}\conf\settings.xml文件,配置如下
<localRepository>D:\sofeware\apache-maven-3.6.0\mvn_resplocalRepository>
说明:
mvn_resp目录需要我们自行创建
<repositories>
<repository>
<id>centralid>
<name>Central Repositoryname>
<url>http://repo.maven.apache.org/maven2url>
<layout>defaultlayout>
<snapshots>
<enabled>falseenabled>
snapshots>
repository>
repositories>
注意:
由于网络原因或仓库维护问题,有时候从默认的远程仓库下载依赖可能会出现问题。在这种情况下,你可以尝试切换到其他可靠的远程仓库或使用镜像仓库来加速下载。
<mirrors>
<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
mirrors>
File --> Settings --> Build, Execution, Deployment --> Build Tools --> Maven
File --> Project Structure --> 选择 Modules --> 点击➕号 --> New Module --> 选择 Maven --> Next -->
点击 FINISH --> APPLY --> OK
创建好的Maven模块如下:
File --> Project Structure --> 选择 Modules --> 点击➕号 --> New Module --> 选择 Maven
Next -->
Next -->
点击 FINISH --> APPLY --> OK
创建好补齐项目结合后的Maven模块如下:
File --> Project Structure --> 选择 Modules --> 点击➕号 --> New Module --> 选择 Maven
Next -->
Next -->
点击 FINISH --> APPLY --> OK
创建好补齐项目结合后的Maven模块如下:
pom.xml
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.1version>
<configuration>
<port>80port>
<path>/path>
configuration>
plugin>
plugins>
build>
依赖管理其实就是管理项目所依赖的第三方资源(jar包、插件…)
传统导入jar包方法
使用Maven以后
直接在pom.xml导入相应坐标即可
Maven 提供了强大的依赖管理功能,可以帮助项目自动下载和管理所需的依赖库。
在 Maven 中,每个依赖库都有一个唯一的坐标来标识,包括组织(Group)、名称(Artifact)和版本(Version)等信息。坐标通常以以下格式表示:
。
例如:
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.34version>
dependency>
dependencies>
依赖库传递性(Dependency Transitivity):Maven 支持依赖库之间的传递性关系。当一个依赖库 A 依赖于另一个依赖库 B,Maven 会自动下载和管理依赖库 B,并将其添加到项目的类路径中。这样,可以通过声明项目对依赖库 A 的依赖,间接地管理依赖库 B
依赖的传递性
依赖库冲突解决(Dependency Conflict Resolution):当项目中存在多个依赖库对同一个库的不同版本有依赖时,可能会导致冲突。Maven 会根据一定的规则来解决依赖库冲突,默认情况下,会选择最近的版本。可以通过在 POM 文件中显式声明依赖库的版本,或者使用 Maven 提供的冲突解决机制来解决冲突。
Maven 提供的冲突解决机制
可以使用可选依赖(Optional Dependencies)来声明一些可选的依赖库。可选依赖是指在某些特定的情况下,项目可能需要使用的依赖库,但并不是必需的。
例如,当项目需要与某个特定的第三方库进行集成时,可以将该库声明为可选依赖。这样,在构建项目时,如果用户选择了与该库集成的选项,Maven 会自动下载和管理该库的依赖。如果用户不需要该库的集成功能,可以不包含该可选依赖,从而减少项目的依赖和构建时间。
简单来说,可选依赖就是指对外隐藏当前所依赖的资源——不透明
要声明可选依赖,可以在项目的 POM 文件中使用
元素下的
元素,并在其中使用
元素来指定依赖库的可选性。
例如:
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<optional>trueoptional>
dependency>
dependencies>
声明为可选依赖。当构建项目时,如果需要使用该库,可以在命令行或构建配置中明确指定该依赖。
例如,使用以下命令构建项目时,可选依赖将被包含:
mvn clean install -DincludeOptional=true
注意:
可选依赖并不会自动传递给其他依赖库。如果某个依赖库依赖于可选依赖,需要显式地将可选依赖声明为该依赖库的直接依赖。这样,当该依赖库被使用时,可选依赖才会被自动下载和管理。
可以使用排除依赖(Exclusions)来排除项目中不需要的依赖库。排除依赖可以帮助减少项目的依赖冲突和依赖数量,从而简化项目的构建和管理。
简单来说,排除依赖是指主动断开所依赖的资源,被排除的资源无需指定版本——不需要
要排除依赖,可以在项目的 POM 文件中使用
元素下的
元素,并在其中使用
元素来指定要排除的依赖库。
例如:
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<exclusions>
<exclusion>
<groupId>org.hamcrestgroupId>
<artifactId>hamcrest-coreartifactId>
exclusion>
exclusions>
dependency>
dependencies>
在上面的示例中,junit
依赖被声明,并且排除了 hamcrest-core
依赖。当构建项目时,Maven 会自动排除 hamcrest-core
依赖,不会将其包含在项目中。
排除依赖可以用于解决依赖冲突的问题。当项目中存在多个依赖库,它们依赖于同一个库的不同版本时,可能会导致冲突。通过排除其中一个版本,可以确保项目使用的是所需的版本,避免冲突。
注意:
排除依赖只会影响当前依赖的传递性依赖。如果其他依赖库也依赖于被排除的库,需要在相应的依赖声明中进行排除。此外,排除依赖也可能导致功能缺失或不完整,因此需要谨慎使用。
使用排除依赖可以帮助简化项目的依赖管理,但需要根据实际需求和项目的特点来决定是否使用排除依赖。应仔细考虑依赖冲突和功能需求,确保排除依赖不会对项目的功能和稳定性产生负面影响。
依赖库范围(Dependency Scope):Maven 支持为依赖库指定不同的范围,以控制依赖库在不同阶段的使用。
作用范围:
常用的依赖库范围包括:
compile
:默认范围,表示依赖库在编译、测试和运行时都可用。test
:表示依赖库仅在测试阶段可用,不会被打包到最终的构建结果中。provided
:表示依赖库由运行环境提供,例如 Java EE 容器中的 API。runtime
:表示依赖库仅在运行时可用,不会被编译和测试阶段使用。scope | 主代码 | 测试代码 | 打包 | 示例 |
---|---|---|---|---|
compile(默认) | ✔ | ✔ | ✔ | log4j |
test | ✔ | junit | ||
provided | ✔ | ✔ | servlet-api | |
runtime | ✔ | jdbc |
compile > test > provided > runtime
可以通过在
元素中使用
元素来指定依赖库的范围
例如:
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.34version>
<scope>runtimescope>
dependency>
dependencies>
间接依赖\直接依赖 | compile | test | provided | runtime |
---|---|---|---|---|
compile | compile | test | provided | runtime |
test | ||||
provided | ||||
runtime | runtime | test | provided | tuntime |
解读:
直接依赖compile 、间接依赖 compile ==> 最终 compile
直接依赖test 、间接依赖 compile ==> 最终 test
直接依赖compile 、间接依赖 runtime ==> 最终 runtime
项目构建周期(Build Lifecycle)是 Maven 中定义的一组标准构建阶段(Build Phase)的顺序集合。
通过定义和配置构建周期,可以按照一定的顺序执行这些构建阶段,从而完成项目的构建过程。
Maven 的标准构建周期包括三个主要的构建阶段:
clean生命周期
defalut生命周期
常用的
site生命周期
在执行 Maven 构建时,默认情况下会按照上述构建周期的顺序依次执行各个构建阶段。例如,执行 mvn clean install
命令会先执行 clean 阶段,然后执行 default 阶段中的 install (并且在defalut阶段中所有在install之前的生命周期都会执行)。
IDEA中提供的生命周期快捷键
Maven 提供了一些常用的插件:
maven-compiler-plugin
:用于编译 Java 代码。maven-surefire-plugin
:用于运行单元测试。maven-jar-plugin
:用于打包项目为 JAR 文件。maven-war-plugin
:用于打包项目为 WAR 文件。maven-deploy-plugin
:用于将构建结果部署到远程仓库插件使用的语法:
mvn [plugin-name]:[goal-name]
例如:
一个Java工程可以使用maven-compiler-plugin 的compile-gila 编译
mvn compiler:compile
IDEA中提供的插件快捷键
设置maven编译的JDK版本,maven3默认使用的是jdk1.5,maven2默认使用的是jdk1.3
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.10.1version>
<configuration>
<source>1.8source>
<target>1.8target>
<encoding>UTF-8encoding>
configuration>
plugin>
plugins>
build>
注意pom中需要放入如下属性
<properties>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
properties>
或者
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
properties>
<plugin>
<groupId>net.alchim31.mavengroupId>
<artifactId>scala-maven-pluginartifactId>
<version>3.2.2version>
<executions>
<execution>
<goals>
<goal>compilegoal>
<goal>testCompilegoal>
goals>
execution>
executions>
plugin>
在pom中加入该插件,可以通过插件和命令启动项目,不用将项目部署到tomcat里了
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.1version>
<configuration>
<port>80port>
<path>/clearpath>
<finalName>clearfinalName>
configuration>
plugin>
plugins>
build>
注意:
如果是一个web项目,则该项目的打包方式为war,加入如下
<packaging>warpackaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-war-pluginartifactId>
<configuration>
<warName>testwarName>
<webResources>
<resource>
<filtering>truefiltering>
<directory>src/main/webapp/WEB-INFdirectory>
<targetPath>WEB-INFtargetPath>
<includes>
<include>web.xmlinclude>
includes>
resource>
webResources>
configuration>
plugin>
plugins>
build>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-assembly-pluginartifactId>
<version>3.1.1version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependenciesdescriptorRef>
descriptorRefs>
<archive>
<manifest>
<addClasspath>trueaddClasspath>
<mainClass>com.clear.wordcount.JavaSparkWordCountmainClass>
manifest>
archive>
configuration>
<executions>
<execution>
<id>make-assemblyid>
<phase>packagephase>
<goals>
<goal>singlegoal>
goals>
execution>
executions>
plugin>
Maven-jar-plugin是Maven自带的一个插件,它主要用于将项目打包成jar包,一般情况下,Maven执行package命令时就会默认调用该插件完成jar包生成的工作。
使用该插件可以实现以下功能:
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-jar-pluginartifactId>
<version>2.4version>
<configuration>
<archive>
<manifest>
<mainClass>com.clear.demo1.CreateFileUtilmainClass>
<addClasspath>trueaddClasspath>
<classpathPrefix>lib/classpathPrefix>
manifest>
<excludes>
<exclude>targetexclude>
excludes>
archive>
<classesDirectory>
classesDirectory>
configuration>
plugin>
在 Maven 中进行分模块设计与开发可以帮助组织和管理项目的结构和依赖关系。下面是一些在 Maven 中进行分模块设计与开发的常见做法和建议:
通过在 Maven 中进行分模块设计与开发,可以更好地组织和管理项目的结构和依赖关系,提高项目的可维护性和可扩展性。同时,也有助于团队协作和并行开发,提高开发效率和质量。
例如,现在我们有一个ssm的项目,包含pojo、dao、service、controller等包,我们现在要将这个模块划分为多个小的模块
主要工作
1 创建模块
2 拷贝原项目中pojo,拷贝完成如下
3 编译pojo模块,若无报错,pojo模块拆分成功
主要工作
1 创建模块
2 解决资源问题
即将pojo模块中的pom坐标加入到当前模块的pom中(以资源的形式加载pojo中可能会使用到的资源)
如下:
<dependency>
<groupId>com.cleargroupId>
<artifactId>ssm_pojoartifactId>
<version>1.0version>
dependency>
3 拷贝原项目中dao,拷贝完成如下
4 编译dao模块,若无报错,dao模块拆分成功
如下遇到如下错误
[ERROR] Failed to execute goal on project ssm_dao: Could not resolve dependencies for project com.clear:ssm_dao:jar:1.0:
说明本地仓库中没有pojo模块资源,坐标加载失败,我们只需要为pojo模块执行install命令即可
主要工作
1 新建模块
2 解决资源问题
即将dao模块中的pom坐标加入到当前模块的pom中(以资源的形式加载dao中可能会使用到的资源)
如下:
<dependency>
<groupId>com.cleargroupId>
<artifactId>ssm_daoartifactId>
<version>1.0version>
dependency>
3 拷贝原项目中service,拷贝完成如下
4 编译service模块,若无报错,service模块拆分成功
主要工作
1 新建模块
2 解决资源问题
即将service模块中的pom坐标加入到当前模块的pom中(以资源的形式加载service中可能会使用到的资源)
如下:
<dependency>
<groupId>com.cleargroupId>
<artifactId>ssm_serviceartifactId>
<version>1.0version>
dependency>
3 拷贝原项目中controller,拷贝完成如下
4 编译controller模块,若无报错,controller模块拆分成功
比如我们前面拆分的ssm项目,拆分成了ssm_controller、ssm_service、ssm_dao、ssm_pojo
依赖关系:ssm_controller --> ssm_service --> ssm_dao --> ssm_pojo
如果我们现在ssm_dao模块更新了(install了以后),可能会产生问题
解决思路:
我们用一个新的模块,管理ssm_controller、ssm_service、ssm_dao、ssm_pojo这四个模块,我们只需要install这个模块,其他四个模块就会被更新
演示:
1 新建管理模块
2 删除无用的src
因为我们这个模块是用于管理的,只需要pom.xml即可,如下
3 配置pom.xml
<packaging>pompackaging>
<modules>
<module>../ssm_controllermodule>
<module>../ssm_daomodule>
<module>../ssm_pojomodule>
<module>../ssm_servicemodule>
modules>
作用:聚合用于快速构建maven工程,一次性构建多个项目/模块
制作聚合管理模块的方式:
创建一个空模块,打包类型定义为pom
<packaging>pompackaging>
定义当前模块进行构建操作时管理的其他模块名称
例如:
<modules>
<module>../ssm_controllermodule>
<module>../ssm_daomodule>
<module>../ssm_pojomodule>
<module>../ssm_servicemodule>
modules>
注意:参与聚合操作的模块的最终执行顺序与模块间的依赖有关系,与配置顺序有关
基本用法:
演示:
1)父模块中声明出依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
<version>1.7.20version>
dependency>
<dependency>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-classicartifactId>
<version>1.2.3version>
dependency>
<dependency>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-coreartifactId>
<version>1.2.3version>
dependency>
dependencies>
dependencyManagement>
2)子模块中指定自己的父模块,并在子模块中引用依赖
<parent>
<artifactId>ssmartifactId>
<groupId>com.cleargroupId>
<version>1.0version>
parent>
<dependencies>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
dependency>
<dependency>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-coreartifactId>
dependency>
<dependency>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-classicartifactId>
dependency>
dependencies>
基本用法:
演示:
1)父模块中声明出插件
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-assembly-pluginartifactId>
<version>3.1.1version>
<executions>
<execution>
<id>make-assemblyid>
<phase>packagephase>
<goals>
<goal>singlegoal>
goals>
execution>
executions>
plugin>
<plugin>
<groupId>net.alchim31.mavengroupId>
<artifactId>scala-maven-pluginartifactId>
<version>3.2.2version>
<executions>
<execution>
<goals>
<goal>compilegoal>
<goal>testCompilegoal>
goals>
execution>
executions>
plugin>
plugins>
pluginManagement>
2)子模块中指定自己的父模块,并在子模块中引用插件
<parent>
<artifactId>mrsartifactId>
<groupId>com.cleargroupId>
<version>1.0-SNAPSHOTversion>
parent>
<build>
<plugins>
<plugin>
<groupId>net.alchim31.mavengroupId>
<artifactId>scala-maven-pluginartifactId>
plugin>
plugins>
build>
在 Maven 中,属性(Properties)是一种用于定义和引用可重用值的机制。属性可以在 Maven 的配置文件中定义,并在其他地方引用和使用。
属性类别
自定义属性:可以定义自己的属性,用于在 POM 文件中引用和使用。等同于定义变量,方便对依赖版本的维护
定义格式:
<properties>
<spring.version>5.2.1.RELEASEspring.version>
properties>
调用格式:
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${spring.version}version>
dependency>
内置属性:使用maven内置属性,快速配置
调用格式:
${basedir}
${version}
使用Maven配置文件setting.xml的标签属性,用于动态配置
调用格式:
${settings.localRepository}
可以读取Java系统属性
调用格式:
${user.home}
系统属性查询方式:
mvn help:system
错误示例:
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.2.1.RELEASEversion>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.5version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>5.1.9.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.1.9.RELEASEversion>
dependency>
我们发现spring相关的依赖,有些为 5.2.1.RELEASE,又有一些为 5.1.9.RELEASE,这种版本不一致的问题,在生产中可能会遇到意想不到的错误
正确示例:
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
<spring.version>5.2.1.RELEASEspring.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.5version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>${spring.version}version>
dependency>
dependencies>
项目开发过程中,为方便团队合作,解决模块间相互依赖和时时更新的问题,开发者对每个模块进行构建的时候,输出的临时性版本叫快照版本(测试阶段版本)
快照版本会随着开发的进展不断更新
约定规范:
示例:
Maven 的资源管理是指在项目构建过程中,如何管理和处理项目中的资源文件。资源文件可以包括配置文件、静态资源、模板文件等。
Maven 提供了一种标准的方式来管理和处理项目中的资源文件。在 Maven 项目中,通常将资源文件放置在 src/main/resources
目录下。这些资源文件会被 Maven 自动复制到生成的构建目录(如 target/classes
)中,以便在运行时可以访问到这些资源文件。
Maven 会根据资源文件的类型进行不同的处理:
问题引入:
在开发中,我们会面临多个依赖的版本问题,我们可以通过自定义属性来管理,如下
<properties>
<spring.version>5.2.1.RELEASEspring.version>
<junit.version>4.12junit.version>
properties>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>${junit.version}version>
<scope>testscope>
dependency>
但是像 properties 格式文件以往我们是无从下手的,如下
# MySQL Server 配置
server.port=3306
# 数据库连接配置
database.url=jdbc:mysql://localhost:3306/db1
database.username=root
database.password=123456
解决方式:
我们在这种配置文件(如 properties)的各种属性可以抽取到pom.xml 中的自定义属性中,然后中配置文件引入即可
如下:
修改后的pom.xml
<properties>
<spring.version>5.2.1.RELEASEspring.version>
<junit.version>4.12junit.version>
<jdbc.url>jdbc:mysql://localhost:3306/db1jdbc.url>
properties>
修改后的properties
# MySQL Server 配置
server.port=3306
# 数据库连接配置
database.url=${jdbc.url}
database.username=root
database.password=123456
注意:
此时我们的配置文件properties 中使用的 自定义属性还未生效,需要在pom中加入如下
<build>
<resources>
<resource>
<directory>ssm_dao/src/main/resourcesdirectory>
<filtering>truefiltering>
resource>
resources>
build>
如果测试目录test中的resouces目录中的资源文件也想引用pom中的自定义属性,可以在pom加入如下
<build>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resourcesdirectory>
<filtering>truefiltering>
testResource>
testResources>
build>
在任意配置文件中加载pom文件中属性(包括自定义属性、内置属性等)
${属性名}
<build>
<resources>
<resource>
<directory>${project.basedir}/src/main/resourcesdirectory>
<filtering>truefiltering>
resource>
resources>
build>
为什么要配置多环节开发配置。例如说,我们在开发中使用的 jdbc.url为 jdbc:mysql://localhost:3306/db1,测试环境使用的jdbc.url为 jdbc:mysql://192.168.188.128:3306/db1 ,那么我们可能需要去修改pom或配置文件,这样显得很麻烦。可以通过多环境开发配置解决
我们可以加载指定的环境配置
mvn 指令 -P 环境定义ID
例如:
开发环境打包jar
mvn install -P dev_env
测试环境打包jar
mvn install -P test_env
pom
<profiles>
<profile>
<id>dev_envid>
<properties>
<jdbc.url>jdbc:mysql://localhost:3306/db1jdbc.url>
properties>
<activation>
<activeByDefault>trueactiveByDefault>
activation>
profile>
<profile>
<id>test_envid>
<properties>
<jdbc.url>jdbc:mysql://192.168.188.128:3306/db1jdbc.url>
properties>
profile>
profiles>
调用测试:
打包项目(默认使用的是开发环境)
mvn install
使用测试环境打包项目
mvn install -P test_env