按照功能拆分
按照模块拆分
导入第三方依赖
的坐标
一样来使用我们自己抽取的模块,这样就解决了代码重复的问题,这种拆分方式就是我们所说的按照模块
拆分com.itheima.config
目录存放的是相关的配置类com.itheima.controller
编写的是Controller类com.itheima.dao
存放的是Dao接口,因为使用的是Mapper接口代理方式,所以没有实现类包com.itheima.service
存的是Service接口,com.itheima.service.impl
存放的是Service实现类环境准备:
复制一份之前的ssm项目,重命名为maven_01_ssm
步骤一:创建新模块
步骤二:项目中创建pojo包(也可以设置为domain)
步骤三:删除原项目中的pojo包
步骤四:
<groupId>com.itheimagroupId>
<artifactId>maven_02_pojoartifactId>
<version>1.0-SNAPSHOTversion>
步骤五:直接编译maven_01_ssm项目时
Failed to execute goal on project maven_01_ssm: Could not resolve
dependencies for project com.itheima:maven_01_ssm:jar:1.0-SNAPSHOT: Could
not find artifact com.itheima:maven_03_pojo:jar:1.0-SNAPSHOT -> [Help 1]
意思就是找不到maven_03_pojo
这个jar包
maven_03_pojo
这个项目,所以我们只需要将maven_03_pojo
项目安装到本地仓库即可。步骤六:将项目安装本地仓库
将需要被依赖的项目maven_03_pojo,使用maven的install命令,把其安装到Maven的本地仓库中
之后再次执行maven_01_ssm的compile的命令后,就已经能够成功编译。
步骤一:创建新模块
步骤二:项目中创建dao包
<dependency>
<groupId>com.itheimagroupId>
<artifactId>maven_04_pojoartifactId>
<version>1.0-SNAPSHOTversion>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.6version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.30version>
dependency>
步骤三:删除原项目中的dao包
步骤四:运行测试
http://localhost:8080/pages/books.html
如果使用maven运行tomacat7,出现报错:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project maven_01_ssm: Compilation failure
现在已经能把项目拆分成一个个独立的模块,当在其他项目中想要使用独立出来的这些模块,只需要在其pom.xml使用
标签来进行jar包的引入即可。
其实就是依赖,关于依赖管理里面都涉及哪些内容,我们就一个个来学习下:
先来说说什么是依赖:
依赖指当前项目运行所需的jar一个项目可以设置多个依赖。
格式为:
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.2.10.RELEASEversion>
dependency>
dependencies>
说明:A代表自己的项目;B,C,D,E,F,G代表的是项目所依赖的jar包;D1和D2、E1和E2代表是相同jar包的不同版本
这里所说的依赖冲突
是指项目依赖的某一个jar包,有多个不同的版本,因而造成类包版本冲突。
情况一:
在maven_01_ssm的pom.xml中添加两个不同版本的Junit依赖:
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>testscope>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
dependencies>
调换位置,刷新maven面板,我们会发现,maven的dependencies面板上总是显示使用的是后加载的jar包
于是得出一个结论:
特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的。
情况二:路径优先
:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
情况三:声明优先
:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
特殊优先
:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
但是对于上面的结果,也不用刻意去记,一切以maven的dependencies面板上显示的为准
依赖传递介绍完以后,来思考一个问题,假如
说明:在真实使用的过程中,maven_01_ssm中是需要用到maven_03_pojo的,我们这里只是用这个例子描述我们的需求。因为有时候,maven_04_dao出于某些因素的考虑,就是不想让别人使用自己所依赖的maven_03_pojo。
方案一:可选依赖
不透明
optional
<dependency>
<groupId>com.itheimagroupId>
<artifactId>maven_03_pojoartifactId>
<version>1.0-SNAPSHOTversion>
<optional>falseoptional>
dependency>
方案二:排除依赖
不需要
maven_03_pojo
的依赖传递,对于排除依赖,则指的是已经有依赖的事实,也就是说maven_01_ssm
项目中已经通过依赖传递用到了maven_03_pojo
,此时我们需要做的是将其进行排除,所以接下来需要修改maven_01_ssm
的pom.xml<dependency>
<groupId>com.itheimagroupId>
<artifactId>maven_04_daoartifactId>
<version>1.0-SNAPSHOTversion>
<exclusions>
<exclusion>
<groupId>com.itheimagroupId>
<artifactId>maven_03_pojoartifactId>
exclusion>
exclusions>
dependency>
介绍完这两种方式后,简单来梳理下,就是
- A依赖B,B依赖C,C通过依赖传递会被A使用到,现在要想办法让A不去依赖C
- 可选依赖是在B上设置
,A不知道有C的存在,
- 排除依赖是在A上设置
,A知道有C的存在,主动将其排除掉。
分模块开发后,需要将这四个项目都安装到本地仓库,目前我们只能通过项目Maven面板的install来安装,并且需要安装四个,如果我们的项目足够多,那一个个install也挺麻烦的
如果四个项目都已经安装成功,当ssm_pojo发生变化后,我们就得将ssm_pojo重新安装到maven仓库,但是为了确保我们对ssm_pojo的修改不会影响到其他模块(比如我们将pojo类中的一个属性删除,如果其他模块调用了这个属性,那必然报错),我们需要对所有模块重新编译,看看有没有问题。然后还需要将所有模块再install一遍
项目少的话还好,但是如果项目多的话,一个个操作项目就容易出现漏掉或重复操作的问题,所以我们就像能不能抽取一个项目,把所有的项目管理起来,以后再想操作这些项目,做需要操作我们抽取的这个项目,这样就省事儿多了
这就要用到我们接下来讲的聚合了
具体实现步骤如下:
<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">
<modelVersion>4.0.0modelVersion>
<groupId>com.itheimagroupId>
<artifactId>maven_00_parentartifactId>
<version>1.0-SNAPSHOTversion>
<packaging>pompackaging>
project>
说明:项目的打包方式,我们接触到的有三种,分别是
- jar:默认情况,说明该项目为java项目
- war:说明该项目为web项目
- pom:说明该项目为聚合或继承(后面会讲)项目
步骤三: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">
<modelVersion>4.0.0modelVersion>
<groupId>com.bloggroupId>
<artifactId>maven_00_parentartifactId>
<version>1.0-SNAPSHOTversion>
<packaging>pompackaging>
<modules>
<module>../maven_01_ssmmodule>
<module>../maven_03_pojomodule>
<module>../maven_04_daomodule>
modules>
project>
步骤四:使用聚合统一管理项目
在maven面板上点击compile,会发现所有受管理的项目都会被执行编译,这就是聚合工程的作用
[INFO] maven_03_pojo … SUCCESS [ 0.874 s]
[INFO] maven_04_dao … SUCCESS [ 0.044 s]
[INFO] maven_01_ssm … SUCCESS [ 0.132 s]
[INFO] maven_00_parent … SUCCESS [ 0.001 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
说明:聚合工程管理的项目在进行运行的时候,会按照项目与项目之间的依赖关系来自动决定执行的顺序和配置的顺序无关。
聚合工程进行某一个构建操作,其他被其管理的项目也会执行相同的构建操作。那么接下来,我们再来分析下,多模块开发存在的另外一个问题,重复配置的问题,我们先来看张图:
- spring-webmvc、spring-jdbc在三个项目模块中都有出现,这样就出现了重复的内容
- spring-test只在ssm_crm和ssm_goods中出现,而在ssm_order中没有,这里是部分重复的内容
- 我们使用的spring版本目前是5.2.10.RELEASE,假如后期要想升级spring版本,所有跟Spring相关jar包都得被修改,涉及到的项目越多,维护成本越高
面对上面这些问题,我们就得用到接下来要学习的继承
具体实现:
<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">
<modelVersion>4.0.0modelVersion>
<groupId>com.itheimagroupId>
<artifactId>maven_00_parentartifactId>
<version>1.0-SNAPSHOTversion>
<packaging>pompackaging>
project>
<parent>
<artifactId>maven_00_parentartifactId>
<groupId>com.itheimagroupId>
<version>1.0-SNAPSHOTversion>
<relativePath>../maven_00_parent/pom.xmlrelativePath>
parent>
步骤三:优化子项目共有依赖导入问题
<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">
<modelVersion>4.0.0modelVersion>
<groupId>com.itheimagroupId>
<artifactId>maven_00_parentartifactId>
<version>1.0-SNAPSHOTversion>
<packaging>pompackaging>
<modules>
<module>../maven_01_ssmmodule>
<module>../maven_03_pojomodule>
<module>../maven_04_daomodule>
modules>
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.2.10.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>5.2.10.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-testartifactId>
<version>5.2.10.RELEASEversion>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.6version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatis-springartifactId>
<version>1.3.0version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.46version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.1.16version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.9.0version>
dependency>
dependencies>
project>
标签被移除掉,会发现多出来的jar包依赖也会随之消失。步骤四:优化子项目依赖版本问题
如果把所有用到的jar包都管理在父项目的pom.xml,看上去更简单些,但是这样就会导致有很多项目引入了过多自己不需要的jar包。如上面看到的这张图:
如果把所有的依赖都放在了父工程中进行统一维护,就会导致ssm_order项目中多引入了spring-test
的jar包,如果这样的jar包过多的话,对于ssm_order来说也是一种"负担"。
那针对于这种部分项目有的jar包,我们该如何管理优化呢?
在父工程中的pom.xml中定义依赖管理
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>testscope>
dependency>
dependencies>
dependencyManagement>
将maven_01_ssm的pom.xml中的junit依赖删除掉,刷新Maven
刷新后,在maven_01_ssm项目中找不到junit依赖,所以我们得出一个结论
标签不真正引入jar包,而是配置可供子项目选择的jar包依赖
子项目要想使用它所提供的这些jar包,需要自己添加依赖,并且不需要指定
在maven_01_ssm的pom.xml添加junit的依赖
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<scope>testscope>
dependency>
注意:这里就千万不需要添加版本了,这样做的好处就是当父工程
dependencyManagement
标签中的版本发生变化后,子项目中的依赖版本也会跟着发生变化
在maven_03_dao的pom.xml添加junit的依赖
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<scope>testscope>
dependency>
这个时候,maven_01_ssm和maven_04_dao这两个项目中的junit版本就会跟随着父项目中的标签dependencyManagement
中junit的版本发生变化而变化。不需要junit的项目就不需要添加对应的依赖即可(maven_03_pojo中就没添加)
至此继承就已经学习完了,总结来说,继承可以帮助做两件事
dependencyManagement
标签下,实现版本管理,方便维护
dependencyManagement
标签不真正引入jar包,只是管理jar包的版本dependencyManagement
标签中jar包版本发生变化,所有子项目中有用到该jar包的地方对应的版本会自动随之更新总之一句话就是,父工程主要是用来快速配置依赖jar包和管理项目中所使用的资源
。
注意事项:
- 子工程中使用父工程中的可选依赖时,仅需要提供群组id和项目id,无需提供版本,版本由父工程统一提供,避免版本冲突
- 子工程中还可以定义父工程中没有定义的依赖关系,只不过不能被父工程进行版本统一管理。
聚合与继承的区别:
聚合与继承分别的作用:
聚合和继承的相同点:
聚合和继承的不同点:
问题分析:
前面我们已经在父工程中的dependencyManagement标签中对项目中所使用的jar包版本进行了统一的管理,但是如果在标签中有如下的内容:
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.2.10.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>5.2.10.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-testartifactId>
<version>5.2.10.RELEASEversion>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.6version>
dependency>
如果我们现在想更新Spring的版本,就会发现我们依然需要更新多个jar包的版本,这样的话还是有可能出现漏改导致程序出问题,而且改起来也是比较麻烦。
问题清楚后,我们需要解决的话,就可以参考咱们java基础所学习的变量,声明一个变量,在其他地方使用该变量,当变量的值发生变化后,所有使用变量的地方也会跟着变化
例如
String spring_version = "5.2.10.RELEASE";
然后将依赖的版本号替换成spring_version
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-testartifactId>
<version>spring_versionversion>
dependency>
解决步骤
步骤一:父工程中定义属性
<properties>
<spring.version>5.2.10.RELEASEspring.version>
<mybatis.version>3.5.6mybatis.version>
properties>
步骤二:修改依赖的version
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-testartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>${mybatis.version}version>
dependency>
此时,我们只需要更新父工程中properties标签中所维护的jar包版本,所有子项目中的版本也就跟着更新。当然除了将spring相关版本进行维护,我们可以将其他的jar包版本也进行抽取,这样就可以对项目中所有jar包的版本进行统一维护
说明:使用
properties
标签来定义属性,在properties
标签内自定义标签名当做属性名,自定义标签内的值即为属性值
例如:,属性名为spring.version,属性值为
5.2.10.RELEASE 5.2.10.RELEASE
在其他地方引用变量时用${变量名}
新的需求,就是想让Maven对于属性的管理范围能更大些,比如我们之前项目中的jdbc.properties,这个配置文件中的属性,能不能也来让Maven进行管理呢?
肯定的,具体的实现步骤如下:
步骤一:父工程定义属性
<properties>
<spring.version>5.2.10.RELEASEspring.version>
<mybatis.version>3.5.6mybatis.version>
<jdbc.driver>com.mysql.jdbc.Driverjdbc.driver>
<jdbc.url>jdbc:mysql://localhost:13306/ssm_db?useSSL=falsejdbc.url>
<jdbc.username>rootjdbc.username>
<jdbc.password>PASSWORDjdbc.password>
properties>
步骤二:jdbc.properties文件中引用属性
jdbc.driver=${jdbc.driver}
jdbc.url=${jdbc.url}
jdbc.username=${jdbc.username}
jdbc.password=${jdbc.password}
步骤三:设置maven过滤文件范围
直接在properties中引用属性,看起来怪怪的,properties怎么能直接用到maven中配置的属性呢?
所以我们还需要来配置一下,让maven_01_ssm/src/main/resources
目录下的jdbc.properties
文件可以解析${}
<build>
<resources>
<resource>
<directory>../maven_01_ssm/src/main/resourcesdirectory>
<filtering>truefiltering>
resource>
resources>
build>
步骤四:测试是否生效
测试的时候,只需要将maven_01_ssm项目进行打包,然后在本地仓库观察打包结果中最终生成的内容是否为Maven中配置的内容。
存在的问题:
如果不只是maven_01_ssm项目需要有属性被父工程管理,如果还有多个项目需要配置,该如何实现呢?
<build>
<resources>
<resource>
<directory>../maven_01_ssm/src/main/resourcesdirectory>
<filtering>truefiltering>
resource>
<resource>
<directory>../maven_02_pojo/src/main/resourcesdirectory>
<filtering>truefiltering>
resource>
...
resources>
build>
可以一个一个配,但是项目足够多的话,这样还是比较繁琐的
<build>
<resources>
<resource>
<directory>${project.basedir}/src/main/resourcesdirectory>
<filtering>truefiltering>
resource>
resources>
build>
说明:如果打包过程中出现错误Error assembling WAR: webxml attribute is required
原因就是Maven发现你的项目为web项目,就会去找web项目的入口web.xml(配置文件配置的方式),发现没有找到,就会报错。
解决方案1
:在maven_02_ssm项目的src\main\webapp\WEB-INF\
添加一个web.xml文件
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
web-app>
解决方案2
: 配置maven打包war时,忽略web.xml检查
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-war-pluginartifactId>
<version>3.2.3version>
<configuration>
<failOnMissingWebXml>falsefailOnMissingWebXml>
configuration>
plugin>
plugins>
build>
上面我们所使用的都是Maven的自定义属性,除了${project.basedir}
,它属于Maven的内置系统属性。
在Maven中的属性分为:
属性分类 | 引用格式 | 示例 |
---|---|---|
自定义属性 | ${自定义属性名} | ${spring.vension} |
内置属性 | ${内置属性名} | b a s e d i r 、 {basedir}、 basedir、{version} |
setting属性 | ${setting.属性名} | ${settings.localRepository} |
ava系统属性 | ${系统属性分类.系统属性名} | ${user.home} |
环境变量属性 | ${env.环境变量属性名} | ${env.JAVA_HOME} |
关于这个版本管理解决的问题是,在Maven创建项目和引用别人项目的时候,我们都看到过如下内容:
<groupId>com.bloggroupId>
<artifactId>maven_00_parentartifactId>
<version>1.0-SNAPSHOTversion>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>5.2.10.RELEASEversion>
这里面有两个单词,SNAPSHOT和RELEASE,它们所代表的含义是什么呢?
除了上面的工程版本,我们还经常能看到一些发布版本:
对于这些版本,我们简单认识下即可
maven提供配置多种环境的设定,帮助开发者在使用过程中快速切换环境。具体实现步骤如下
步骤一:父工程配置多个环境,并指定默认激活环境
<profiles>
<profile>
<id>env_depid>
<properties>
<jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_dbjdbc.url>
properties>
<activation>
<activeByDefault>trueactiveByDefault>
activation>
profile>
<profile>
<id>env_proid>
<properties>
<jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_dbjdbc.url>
properties>
profile>
<profile>
<id>env_testid>
<properties>
<jdbc.url>jdbc:mysql://127.3.3.3:3306/ssm_dbjdbc.url>
properties>
profile>
profiles>
步骤二:执行install查看env_dep环境是否生效
在你本地仓库找到打包的war包,看看jdbc.properties配置文件中的url是否为jdbc:mysql://127.1.1.1:3306/ssm_db
步骤三:切换默认环境为生产环境
<profiles>
<profile>
<id>env_depid>
<properties>
<jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_dbjdbc.url>
properties>
profile>
<profile>
<id>env_proid>
<properties>
<jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_dbjdbc.url>
properties>
<activation>
<activeByDefault>trueactiveByDefault>
activation>
profile>
<profile>
<id>env_testid>
<properties>
<jdbc.url>jdbc:mysql://127.3.3.3:3306/ssm_dbjdbc.url>
properties>
profile>
profiles>
步骤四:执行install并查看env_pro环境是否生效
查看到的结果为jdbc:mysql://127.2.2.2:3306/ssm_db
虽然已经能够实现不同环境的切换,但是每次切换都是需要手动修改,如何来实现在不改变代码的前提下完成环境的切换呢?
步骤六:执行安装并查看env_test环境是否生效
查看到的结果为jdbc:mysql://127.3.3.3:3306/ssm_db
所以总结来说,对于多环境切换只需要两步即可:
父工程中定义多环境
<profiles>
<profile>
<id>环境名称id>
<properties>
<key>valuekey>
properties>
<activation>
<activeByDefault>trueactiveByDefault>
activation>
profile>
...
profiles>
使用多环境(构建过程)
mvn 指令 -P 环境定义的ID
前面在执行install
指令的时候,Maven都会按照顺序从上往下依次执行,每次都会执行test
,
对于test
来说有它存在的意义,
遇到上面这些情况的时候,我们就想跳过测试执行下面的构建命令,具体实现方式有很多:
方式一
:IDEA工具实现跳过测试
IDEA的maven面板上有一个闪电按钮
,点击之后可以跳过测试,不过此种方式会跳过所有的测试,如果我们想更精细的控制哪些跳过,哪些不跳过,那么就需要使用配置插件的方式来完成了
方式二
:配置插件实现跳过测试
在父工程中的pom.xml中添加测试插件配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-surefire-pluginartifactId>
<version>2.12.4version>
<configuration>
<skipTests>falseskipTests>
<excludes>
<exclude>**/BookServiceTest.javaexclude>
excludes>
configuration>
plugin>
plugins>
build>
方式三
:命令行跳过测试
使用Maven的命令行,mvn 指令 -D skipTests
注意事项:
- 执行的项目构建指令必须包含测试生命周期,否则无效果。例如执行compile生命周期,不经过test生命周期。
- 该命令可以不借助IDEA,直接使用cmd命令行进行跳过测试,需要注意的是cmd要在pom.xml所在目录下进行执行。
所以到这就有两个概念,一个是私服,一个是中央仓库
私服
:公司内部搭建的用于存储Maven资源的服务器远程仓库
:Maven开发团队维护的用于存储Maven资源的服务器所以说:
搭建Maven私服的方式有很多,我们来介绍其中一种使用量比较大的实现方式:
SNAPSHOT
和RELEASE
,如果把这两类的都放到同一个仓库,比较混乱,所以私服就把这两个种jar包放入不同的仓库SNAPSHOT
的,一种是存放RELEASE
还有一种是存放从远程仓库下载的第三方jar包,那么我们在获取资源的时候要从哪个仓库种获取呢?所有私服仓库总共分为三大类:
仓库类别 | 英文名称 | 功能 | 关联操作 |
---|---|---|---|
宿主仓库 | hosted | 保存自主研发+第三方资源 | 上传 |
代理仓库 | proxy | 代理连接中央仓库 | 下载 |
仓库组 | group | 为仓库编组简化下载操作 | 下载 |
步骤一:私服上配置仓库
新建两个仓库,type选hosted,version policy 一个选release,一个选snapshot
步骤二:配置本地Maven对私服的访问权限
<servers>
<server>
<id>itheima-snapshotid>
<username>adminusername>
<password>adminpassword>
server>
<server>
<id>itheima-releaseid>
<username>adminusername>
<password>adminpassword>
server>
servers>
<mirror>
<id>maven-publicid>
<mirrorOf>*mirrorOf>
<url>http://localhost:8081/repository/maven-public/url>
mirror>
本地仓库与私服已经建立了连接,接下来我们就需要往私服上上传资源和下载资源,具体的实现步骤如下
步骤一:配置工程上传私服的具体位置
<distributionManagement>
<repository>
<id>itheima-releaseid>
<url>http://localhost:8081/repository/itheima-release/url>
repository>
<snapshotRepository>
<id>itheima-snapshotid>
<url>http://localhost:8081/repository/itheima-snapshot/url>
snapshotRepository>
distributionManagement>
步骤二:发布资源到私服
maven面板中运行deploy
,或者执行maven命令mvn deploy
注意:
现在发布是在blog-snapshot仓库中,如果想发布到blog-release仓库中就需要将项目pom.xml中的version修改成RELEASE即可。
<groupId>com.itheimagroupId>
<artifactId>maven_00_parentartifactId>
<version>1.0-RELEASEversion>
如果私服中没有对应的jar,会去中央仓库下载,速度很慢。可以配置让私服去阿里云中下载依赖。
修改maven-central的Remote storage为私服去阿里云中下载依赖
至此私服的搭建就已经完成,相对来说有点麻烦,但是步骤都比较固定