做真实的自己 视频网站/品牌推广的概念
目录
一、分模块开发
1、分模块开发设计
2、依赖管理
二、继承和聚合
1、聚合
2、继承
三、属性
1、基本介绍
2、版本管理
四、多环境配置与应用
1、多环境开发
2、跳过测试
五、私服
1、私服安装
2、私服仓库分类
一、分模块开发
1、分模块开发设计
▶ 示意图
▶ 抽取domai层
▷ 步骤1 : 创建新模块
创建一个名称为`maven_03_pojo`的jar项目。
▷ 步骤2 : 项目中创建domain包
在`maven_03_pojo`项目中创建`com.itheima.domain`包,并将`maven_02_ssm`中Book类拷贝到该包中
▷ 步骤3 : 删除原项目中的domain包
删除后,`maven_02_ssm`项目中用到`Book`的类中都会有红色提示,要想解决这个问题,我们需要在`maven_02_ssm`中添加`maven_03_pojo`的依赖。
▷ 步骤4 : 建立依赖关系
在`maven_02_ssm`项目的pom.xml添加`maven_03_pojo`的依赖
<dependency><groupId>com.itheima</groupId><artifactId>maven_03_pojo</artifactId><version>1.0-SNAPSHOT</version> </dependency>
因为添加了依赖,所以在`maven_02_ssm`中就已经能找到Book类,所以刚才的报红提示就会消。
▷ 步骤5 : 将项目安装本地仓库
将需要被依赖的项目`maven_03_pojo`,使用maven的install命令,把其安装到Maven的本地仓库中。
安装成功后,在对应的路径下就看到安装好的jar包
说明: 具体安装在哪里,和你们自己电脑上Maven的本地仓库配置的位置有关。
当执行`maven_02_ssm`的compile的命令后,就已经能够成功编译。其他的模块类似,都是这样拆分。
2、依赖管理
maven基础中有介绍:http://t.csdn.cn/1wBO8
二、继承和聚合
1、聚合
▶ 基本介绍
● 分模块开发后,需要将这四个项目都安装到本地仓库,目前我们只能通过项目Maven面板的`install`来安装,并且需要安装四个,如果我们的项目足够多,那么一个个安装起来还是比较烦的
● 如果四个项目都已经安装成功,当ssm_pojo发生变化后,我们就得将ssm_pojo重新安装到maven仓库,但是为了确保我们对ssm_pojo的修改不会影响到其他项目模块,我们需要对所有的模块进行重新编译,那又需要将所有的模块再来一遍,项目少的话还好,但是如果项目多的话,一个个操作项目就容易出现漏掉或重复操作的问题,所以提出聚合。● 所谓聚合: 将多个模块组织成一个整体,同时进行项目构建的过程称为聚合
● 聚合工程:通常是一个不具有业务功能的"空"工程(有且仅有一个pom文件)
● 作用:使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建
● 当工程中某个模块发生更新(变更)时,必须保障工程中与已更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题。▶ 具体实现骤
▷ 步骤1 : 创建一个空的maven项目
▷ 步骤2 : 将项目的打包方式改为pom
<?xml version="1.0" encoding="UTF-8"?> <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.0</modelVersion><groupId>com.itheima</groupId><artifactId>maven_01_parent</artifactId><version>1.0-RELEASE</version><packaging>pom</packaging></project>
说明: 项目的打包方式,我们接触到的有三种,分别是
● jar : 默认情况,说明该项目为java项目
● war : 说明该项目为web项目
● pom : 说明该项目为聚合或继承(后面会讲)目▷ 步骤3 : pom.xml添加所要管理的项目
<?xml version="1.0" encoding="UTF-8"?> <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.0</modelVersion><groupId>com.itheima</groupId><artifactId>maven_01_parent</artifactId><version>1.0-RELEASE</version><packaging>pom</packaging><!--设置管理的模块名称--><modules><module>../maven_02_ssm</module><module>../maven_03_pojo</module><module>../maven_04_dao</module></modules> </project>
▷ 步骤4 : 使用聚合统一管理项目
测试发现,当`maven_01_parent`的`compile`被点击后,所有被其管理的项目都会被执行编译操作。这就是聚合工程的作用。
说明:聚合工程管理的项目在进行运行的时候,会按照项目与项目之间的依赖关系来自动决定执行的顺序和配置的顺序无关。聚合工程主要是用来管理项目。
2、继承
▶ 基本介绍
完成了使用聚合工程去管理项目,聚合工程进行某一个构建操作,其他被其管理的项目也会执行相同的构建操作。多模块开发存在的另外一个问题,`重复配置`的问题,我们先来看张图:
● `spring-webmvc`、`spring-jdbc`在三个项目模块中都有出现,这样就出现了重复的内容
● `spring-test`只在ssm_crm和ssm_goods中出现,而在ssm_order中没有,这里是部分重复的内容
● 我们使用的spring版本目前是`5.2.10.RELEASE`,假如后期要想升级spring版本,所有跟Spring相关jar包都得被修改,涉及到的项目越多,维护成本越高,面对上面的这些问题,就得用到继承。● 所谓继承 : 描述的是两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承。
● 作用:
○ 简化配置
○ 减少版本冲突▶ 具体实现骤
▷ 步骤1 : 创建一个空的Maven项目并将其打包方式设置为pom
因为这一步和前面maven创建聚合工程的方式是一摸一样,所以我们可以单独创建一个新的工程,也可以直接和聚合公用一个工程。实际开发中,聚合和继承一般也都放在同一个项目中,但是这两个的功能是不一样的。
▷ 步骤2 : 在子项目中设置其父工程
分别在`maven_02_ssm`,`maven_03_pojo`,`maven_04_dao`的pom.xml中添加其父项目为`maven_01_parent`
<!--配置当前工程继承自parent工程--> <parent><groupId>com.itheima</groupId><artifactId>maven_01_parent</artifactId><version>1.0-RELEASE</version><!--设置父项目pom.xml位置路径--><relativePath>../maven_01_parent/pom.xml</relativePath> </parent>
▷ 步骤3 : 优化子项目共有依赖导入问题
1. 将子项目共同使用的jar包都抽取出来,维护在父项目的pom.xml中
<?xml version="1.0" encoding="UTF-8"?> <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.0</modelVersion><groupId>com.itheima</groupId><artifactId>maven_01_parent</artifactId><version>1.0-RELEASE</version><packaging>pom</packaging><!--设置管理的模块名称--><modules><module>../maven_02_ssm</module><module>../maven_03_pojo</module><module>../maven_04_dao</module></modules><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version></dependency></dependencies> </project>
2. 删除子项目中已经被抽取到父项目的pom.xml中的jar包,如在`maven_02_ssm`的pom.xml中将已经出现在父项目的jar包删除掉
<?xml version="1.0" encoding="UTF-8"?><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.0</modelVersion><groupId>com.itheima</groupId><artifactId>maven_02_ssm</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><!--配置当前工程继承自parent工程--><parent><groupId>com.itheima</groupId><artifactId>maven_01_parent</artifactId><version>1.0-RELEASE</version><relativePath>../maven_01_parent/pom.xml</relativePath></parent><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>com.itheima</groupId><artifactId>maven_04_dao</artifactId><version>1.0-SNAPSHOT</version><!--排除依赖是隐藏当前资源对应的依赖关系--><exclusions><exclusion><groupId>log4j</groupId><artifactId>log4j</artifactId></exclusion><exclusion><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId></exclusion></exclusions></dependency></dependencies><build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port>80</port><path>/</path></configuration></plugin></plugins></build> </project>
删除完后,你会发现父项目中有依赖对应的jar包,子项目虽然已经将重复的依赖删除掉了,但是刷新的时候,子项目中所需要的jar包依然存在。当项目的`<parent>`标签被移除掉,会发现多出来的jar包依赖也会随之消失。
3. 将`maven_04_dao`项目的pom.xml中的所有依赖删除,然后添加上`maven_01_parent`的父项目坐标
<?xml version="1.0" encoding="UTF-8"?> <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.0</modelVersion><groupId>com.itheima</groupId><artifactId>maven_04_dao</artifactId><version>1.0-SNAPSHOT</version><!--配置当前工程继承自parent工程--><parent><groupId>com.itheima</groupId><artifactId>maven_01_parent</artifactId><version>1.0-RELEASE</version><relativePath>../maven_01_parent/pom.xml</relativePath></parent> </project>
刷新并查看Maven的面板,会发现maven_04_dao同样引入了父项目中的所有依赖。
这样我们就可以解决刚才提到的第一个问题,将子项目中的公共jar包抽取到父工程中进行统一添加依赖,这样做的可以简化配置,并且当父工程中所依赖的jar包版本发生变化,所有子项目中对应的jar包版本也会跟着更新。
▷ 步骤4 : 优化子项目依赖版本问题
如果把所有用到的jar包都管理在父项目的pom.xml,看上去更简单些,但是这样就会导致有很多项目引入了过多自己不需要的jar包。如上面看到的这张图:
如果把所有的依赖都放在了父工程中进行统一维护,就会导致ssm_order项目中多引入了`spring-test`的jar包,如果这样的jar包过多的话,对于ssm_order来说也是一种"负担"。
那针对于这种部分项目有的jar包,该如何管理优化呢?
1. 在父工程mavne_01_parent的pom.xml来定义依赖管理
<!--定义依赖管理--> <dependencyManagement><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies> </dependencyManagement>
2. 将maven_02_ssm的pom.xml中的junit依赖删除掉,刷新Maven
刷新完会发现,在maven_02_ssm项目中的junit依赖并没有出现,所以我们得到一个结论:
`<dependencyManagement>`标签不真正引入jar包,而是配置可供子项目选择的jar包依赖子项目要想使用它所提供的这些jar包,需要自己添加依赖,并且不需要指定`<version>`
3. 在maven_02_ssm的pom.xml添加junit的依赖
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope> </dependency>
注意:这里就不需要添加版本了,这样做的好处就是当父工程dependencyManagement标签中的版本发生变化后,子项目中的依赖版本也会跟着发生变化
4. 在maven_04_dao的pom.xml添加junit的依赖
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope> </dependency>
这个时候,maven_02_ssm和maven_04_dao这两个项目中的junit版本就会跟随着父项目中的标签dependencyManagement中junit的版本发生变化而变化。不需要junit的项目就不需要添加对应的依赖即可。
总结来说,继承可以帮助做两件:(父工程主要是用来快速配置依赖jar包和管理项目中所使用的资源。)
● 将所有项目公共的jar包依赖提取到父工程的pom.xml中,子项目就可以不用重复编写,简化开发
● 将所有项目的jar包配置到父工程的dependencyManagement标签下,实现版本管理,方便维护
○ dependencyManagement标签不真正引入jar包,只是管理jar包的版本
○ 子项目在引入的时候,只需要指定groupId和artifactId,不需要加version
○ 当dependencyManagement标签中jar包版本发生变化,所有子项目中有用到该jar包的地方对应的版本会自动随之更新▶ 聚合与继承的别
▷ 两种之间的作:
● 聚合用于快速构建项目,对项目进行管理
● 继承用于快速配置和管理子项目中所使用jar包的版本▷ 聚合和继承的相同点:
● 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
● 聚合与继承均属于设计型模块,并无实际的模块内容▷ 聚合和继承的不同点:
● 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
● 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己▶ IDEA构建聚合与继承程
▷ 步骤1 : 创建一个Maven项目
创建一个空的Maven项目,可以将项目中的`src`目录删除掉,这个项目作为聚合工程和父工程。
▷ 步骤2 : 创建子项目
该项目可以被聚合工程管理,同时会继承父工程。
创建成功后,maven_parent即是聚合工程又是父工程,maven_web中也有parent标签,继承的就是maven_parent,对于难以配置的内容都自动生成。
三、属性
1、基本介绍
▶ 图示
▶ 解决骤
▷ 步骤1 : 父工程中定义属性
<properties><spring.version>5.2.10.RELEASE</spring.version><junit.version>4.12</junit.version><mybatis-spring.version>1.3.0</mybatis-spring.version> </properties>
▷ 步骤2 : 修改依赖的version
<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version> </dependency> <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version> </dependency> <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version> </dependency>
此时,我们只需要更新父工程中properties标签中所维护的jar包版本,所有子项目中的版本也就跟着更新。当然除了将spring相关版本进行维护,我们可以将其他的jar包版本也进行抽取,这样就可以对项目中所有jar包的版本进行统一维护,如:
<!--定义属性--> <properties><spring.version>5.2.10.RELEASE</spring.version><junit.version>4.12</junit.version><mybatis-spring.version>1.3.0</mybatis-spring.version> </properties>
▶ 配置文件加载属性
想让Maven对于属性的管理范围能更大些,比如我们之前项目中的`jdbc.properties`,这个配置文件中的属性,能不能也来让Maven进行管理呢?
答案是肯定的,具体的实现步骤:
▷ 步骤1 : 父工程定义属性
<properties><jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url> </properties>
▷ 步骤2 : jdbc.properties文件中引用属性
在jdbc.properties,将jdbc.url的值直接获取Maven配置的属性
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=${jdbc.url} jdbc.username=root jdbc.password=root
▷ 步骤3 : 设置maven过滤文件范围
Maven在默认情况下是从当前项目的`src\main\resources`下读取文件进行打包。现在我们需要打包的资源文件是在maven_02_ssm下,需要我们通过配置来指定下具体的资源目录。
<build><resources><!--设置资源目录--><resource><directory>../maven_02_ssm/src/main/resources</directory><!--设置能够解析${},默认是false --><filtering>true</filtering></resource></resources> </build>
说明: directory路径前要添加`../`的原因是maven_02_ssm相对于父工程的pom.xml路径是在其上一层的目录中,所以需要添加。
修改完后,注意maven_02_ssm项目的resources目录就多了些东西,如下:
▷ 步骤4 : 测试是否生效
测试的时候,只需要将maven_02_ssm项目进行打包,然后观察打包结果中最终生成的内容是否为Maven中配置的内容。
▶ 问题解决
有一个问题没有解决,因为不只是maven_02_ssm项目需要有属性被父工程管理,如果有多个项目需要配置,该如何实现?
▷ 方式一:
<build><resources><!--设置资源目录,并设置能够解析${}--><resource><directory>../maven_02_ssm/src/main/resources</directory><filtering>true</filtering></resource><resource><directory>../maven_03_pojo/src/main/resources</directory><filtering>true</filtering></resource>...</resources> </build>
可以配,但是如果项目够多的话,这个配置也是比较繁琐
▷ 方式二:
<build><resources><!--${project.basedir}: 当前项目所在目录,子项目继承了父项目,相当于所有的子项目都添加了资源目录的过滤--><resource><directory>${project.basedir}/src/main/resources</directory><filtering>true</filtering></resource></resources> </build>
说明: 打包的过程中如果报如下错误:
原因就是Maven发现你的项目为web项目,就会去找web项目的入口web.xml[配置文件配置的方式],发现没有找到,就会报。
▷ 解决方案1:在maven_02_ssm项目的`src\main\webapp\WEB-INF\`添加一个web.xml文件
<?xml version="1.0" encoding="UTF-8"?> <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.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.2.3</version><configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin></plugins> </build>
上面我们所使用的都是Maven的自定义属性,除了${project.basedir},它属于Maven的内置系统属性。
在Maven中的属性分:
○ 自定义属性(常用)
○ 内置属性
○ Setting属性
○ Java系统属性
○ 环境变量属性
具体如何查看这些属性:
在cmd命令行中输入`mvn help:system`
具体使用,就是使用 `${key}`来获取,key为等号左边的,值为等号右边的,比如获取红线的值,对应的写法为 `${java.runtime.name}`。
2、版本管理
关于这个版本管理解决的问题是,在Maven创建项目和引用别人项目的时候,我们都看到过如下内容:
在我们jar包的版本定义中,有两个工程版本用的比较多:
● SNAPSHOT(快照版本)
○ 项目开发过程中临时输出的版本,称为快照版本
○ 快照版本会随着开发的进展不断更新
● RELEASE(发布版本)
○ 项目开发到一定阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的
○ 即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本除了上面的工程版本,我们还经常能看到一些发布版本:
● alpha版 : 内测版,bug多不稳定内部版本不断添加新功能
● beta版 : 公测版,不稳定(比alpha稳定些),bug相对较多不断添加新功能
● 纯数字版
四、多环境配置与应用
1、多环境开发
● 我们平常都是在自己的开发环境进行开发,
● 当开发完成后,需要把开发的功能部署到测试环境供测试人员进行测试使用,
● 等测试人员测试通过后,我们会将项目部署到生成环境上线使用。
● 这个时候就有一个问题是,不同环境的配置是不相同的,如不可能让三个环境都用一个数据库,所以就会有三个数据库的url配置,
● 我们在项目中如何配置?
● 要想实现不同环境之间的配置切换又该如何来实现呢?▶ 具体实现骤
▷ 步骤1 : 父工程配置多个环境,并指定默认激活环境
<profiles><!--开发环境--><profile><id>env_dep</id><properties><jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url></properties><!--设定是否为默认启动环境--><activation><activeByDefault>true</activeByDefault></activation></profile><!--生产环境--><profile><id>env_pro</id><properties><jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_db</jdbc.url></properties></profile><!--测试环境--><profile><id>env_test</id><properties><jdbc.url>jdbc:mysql://127.3.3.3:3306/ssm_db</jdbc.url></properties></profile> </profiles>
▷ 步骤2 : 执行安装查看env_dep环境是否生效
查看到的结果为:
▷ 步骤3 : 切换默认环境为生产环境
<profiles><!--开发环境--><profile><id>env_dep</id><properties><jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url></properties></profile><!--生产环境--><profile><id>env_pro</id><properties><jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_db</jdbc.url></properties><!--设定是否为默认启动环境--><activation><activeByDefault>true</activeByDefault></activation></profile><!--测试环境--><profile><id>env_test</id><properties><jdbc.url>jdbc:mysql://127.3.3.3:3306/ssm_db</jdbc.url></properties></profile> </profiles>
▷ 步骤4 : 执行安装并查看env_pro环境是否生效
查看到的结果为`jdbc:mysql://127.2.2.2:3306/ssm_db`
虽然已经能够实现不同环境的切换,但是每次切换都是需要手动修改,如何来实现在不改变代码的前提下完成环境的切换呢?
▷ 步骤5 : 命令行实现环境切换
▷ 步骤6 : 执行安装并查看env_test环境是否生效
查看到的结果为`jdbc:mysql://127.3.3.3:3306/ssm_db`
2、跳过测试
前面在执行`install`指令的时候,Maven都会按照顺序从上往下依次执行,每次都会执行`test`,对于`test`来说有它存在的意义,
● 可以确保每次打包或者安装的时候,程序的正确性,假如测试已经通过在我们没有修改程序的前提下再次执行打包或安装命令,由于顺序执行,测试会被再次执行,就有点耗费时间了。
● 功能开发过程中有部分模块还没有开发完毕,测试无法通过,但是想要把其中某一部分进行快速打包,此时由于测试环境失败就会导致打包失败。遇到上面这些情况的时候,我们就想跳过测试执行下面的构建命令,具体实现方:
▶ 方式一 : IDEA工具实现跳过测试
图中的按钮为`Toggle 'Skip Tests' Mode`,Toggle翻译为切换的意思,也就是说在测试与不测试之间进行切换。点击一下,出现测试画横线的图片,如下:
说明测试已经被关闭,再次点击就会恢复。这种方式最简单,但是有点"暴力",会把所有的测试都跳过,如果我们想更精细的控制哪些跳过哪些不跳过,就需要使用配置插件的方式。
▶ 方式二 : 配置插件实现跳过测试
在父工程中的pom.xml中添加测试插件配置
<build><plugins><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.12.4</version><configuration><skipTests>false</skipTests><!--排除掉不参与测试的内容--><excludes><exclude>**/BookServiceTest.java</exclude></excludes></configuration></plugin></plugins> </build>
skipTests : 如果为true,则跳过所有测试,如果为false,则不跳过测试
excludes:哪些测试类不参与测试,即排除,针对skipTests为false来设置的
includes: 哪些测试类要参与测试,即包含,针对skipTests为true来设置的
▶ 方式三 : 命令行跳过测试
使用Maven的命令行,`mvn 指令 -D skipTests`
注意事项:
● 执行的项目构建指令必须包含测试生命周期,否则无效果。例如执行compile生命周期,不经过test生命周期。
● 该命令可以不借助IDEA,直接使用cmd命令行进行跳过测试,需要注意的是cmd要在pom.xml所在目录下进行执行。
五、私服
1、私服安装
▶ 简单介绍
● 私服 : 公司内部搭建的用于存储Maven资源的服务器
● 远程仓库 : Maven开发团队维护的用于存储Maven资源的服务器
所以说: 私服是一台独立的服务器,用于解决团队内部的资源共享与资源同步问题
● Nexus
○ Sonatype公司的一款maven私服产品
○ 下载地址:https://help.sonatype.com/repomanager3/product-information/download▶ 私服装
▷ 步骤1 :下载解压
将`资料\latest-win64.zip`解压到一个空目录下。
▷ 步骤2 : 启动Nexus
使用cmd进入到解压目录下的`nexus-3.30.1-01\bin`,执行如下命令:
nexus.exe /run nexus
看到如下内容,说明启动成功。
▷ 步骤3 : 浏览器访问
访问地址为:
http://localhost:8081
▷ 步骤4 : 首次登录重置密码
输入用户名和密码进行登录,登录成功后,出现如下页面
点击下一步,需要重新输入新密码,为了和后面的保持一致,密码修改为`admin`
设置是否运行匿名访问
点击完成
至此私服就已经安装成功。如果要想修改一些基础配置信息,可以使用:
● 修改基础配置信息
○ 安装路径下etc目录中nexus-default.properties文件保存有nexus基础配置信息,例如默认访问端口。
● 修改服务器运行配置信息
○ 安装路径下bin目录中nexus.vmoptions文件保存有nexus服务器启动对应的配置信息,例如默认占用内存空间。2、私服仓库分类
▶ 私服资源操作流程分析
(1) 在没有私服的情况下,我们自己创建的服务都是安装在Maven的本地仓库中
(2) 私服中也有仓库,我们要把自己的资源上传到私服,最终也是放在私服的仓库中
(3) 其他人要想使用你所上传的资源,就需要从私服的仓库中获取
(4) 当我们要使用的资源不是自己写的,是远程中央仓库有的第三方jar包,这个时候就需要从远程中央仓库下载,每个开发者都去远程中央仓库下速度比较慢(中央仓库服务器在国外)
(5) 私服就再准备一个仓库,用来专门存储从远程中央仓库下载的第三方jar包,第一次访问没有就会去远程中央仓库下载,下次再访问就直接走私服下载
(6) 前面在介绍版本管理的时候提到过有`SNAPSHOT`和`RELEASE`,如果把这两类的都放到同一个仓库,比较混乱,所以私服就把这两个种jar包放入不同的仓库
(7) 上面我们已经介绍了有三种仓库,一种是存放`SNAPSHOT`的,一种是存放`RELEASE`还有一种是存放从远程仓库下载的第三方jar包,那么我们在获取资源的时候要从哪个仓库种获取呢?
(8) 为了方便获取,我们将所有的仓库编成一个组,我们只需要访问仓库组去获取资源。
所有私服仓库总共分为三大:
● 宿主仓库hosted
保存无法从中央仓库获取的资源
○ 自主研发
○ 第三方非开源项目,比如Oracle,因为是付费产品,所以中央仓库没有● 代理仓库proxy
○ 代理远程仓库,通过nexus访问其他公共仓库,例如中央仓库
● 仓库组group
○ 将若干个仓库组成一个群组,简化配置
○ 仓库组不能保存资源,属于设计型仓库
▶ 本地仓库访问私服置
▷ 步骤1 : 私服上配置仓库
说明
● 第5,6步骤是创建itheima-snapshot仓库
● 第7,8步骤是创建itheima-release仓库
▷ 步骤2 : 配置本地Maven对私服的访问权限
<servers><server><id>itheima-snapshot</id><username>admin</username><password>admin</password></server><server><id>itheima-release</id><username>admin</username><password>admin</password></server> </servers>
▷ 步骤3 : 配置私服的访问路径
<mirrors><mirror><!--配置仓库组的ID--><id>maven-public</id><!--*代表所有内容都从私服获取--><mirrorOf>*</mirrorOf><!--私服仓库组maven-public的访问路径--><url>http://localhost:8081/repository/maven-public/</url></mirror> </mirrors>
为了避免阿里云Maven私服地址的影响,建议先将之前配置的阿里云Maven私服镜像地址注释掉,等练习完后,再将其恢复。
至此本地仓库就能与私服进行交互了。
▶ 私服资源上传与下载
本地仓库与私服已经建立了连接,接下来就需要往私服上上传资源和下载资源,具体的实现步骤:
▷ 步骤1 : 配置工程上传私服的具体位置
<!--配置当前工程保存在私服中的具体位置--> <distributionManagement><repository><!--和maven/settings.xml中server中的id一致,表示使用该id对应的用户名和密码--><id>itheima-release</id><!--release版本上传仓库的具体地址--><url>http://localhost:8081/repository/itheima-release/</url></repository><snapshotRepository><!--和maven/settings.xml中server中的id一致,表示使用该id对应的用户名和密码--><id>itheima-snapshot</id><!--snapshot版本上传仓库的具体地址--><url>http://localhost:8081/repository/itheima-snapshot/</url></snapshotRepository> </distributionManagement>
▷ 步骤2 : 发布资源到私服
或者执行Maven命令
mvn deploy
注意:
要发布的项目都需要配置`distributionManagement`标签,要么在自己的pom.xml中配置,要么在其父项目中配置,然后子项目中继承父项目即可。发布成功,在私服中就能看到:
现在发布是在itheima-snapshot仓库中,如果想发布到itheima-release仓库中就需要将项目pom.xml中的version修改成RELEASE即可。
如果想删除已经上传的资源,可以在界面上进行删除操作:
如果私服中没有对应的jar,会去中央仓库下载,速度很慢。可以配置让私服去阿里云中下载依赖。
相关文章:

maven高级知识。
目录 一、分模块开发 1、分模块开发设计 2、依赖管理 二、继承和聚合 1、聚合 2、继承 三、属性 1、基本介绍 2、版本管理 四、多环境配置与应用 1、多环境开发 2、跳过测试 五、私服 1、私服安装 2、私服仓库分类 一、分模块开发 1、分模块开发设计 ▶ 示意图 …...

Python 之 Pandas 处理字符串和apply() 函数、applymap() 函数、map() 函数详解
文章目录一、处理字符串1. 向量化字符串操作简介2. str 方法的简介二、apply() 函数详解三、applymap() 函数详解四、map() 函数详解一、处理字符串 当我们遇到一个超级大的 DataFrame,里面有一列类型为字符串,要将每一行的字符串都用同一方式进行处理&…...

汇川AM402和上位机C#ModebusTcp通讯
目录 一、测试任务 二、测试环境 三、PLC工程 1、组态配置 2、ip地址、端口号 3、全局变量定义 四、C#端Winform程序创建 1创建主界面 2、创建子窗口 3、运行生成,界面效果 4、Modebus协议说明 5、Modebus操作说明 六、测试 1、寄存器读测试 2、MW1300寄…...

给你一个电商网站,你如何测试?功能测试及接口测试思路是什么?
功能测试思路 1、注册测试: 测试注册表单是否可以正确提交用户信息; 测试注册表单是否有输入限制,例如密码长度、邮箱格式等; 测试注册后是否可以正常登录。 2、登录测试: 测试登录表单是否可以正确提交用户信息&…...

Spring Boot 3.0系列【5】基础篇之应用配置文件
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.3 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 前言应用配置文件文件格式YAML获取配置属性方式1:@Value方式2: @ConfigurationProperties方式3: @PropertySource方式4…...

SQLyog图形化界面工具【超详细讲解】
目录 一、SQLyog 介绍 二、SQLyog 社区版下载 三、SQLyog 安装 1、选择Chinese后点击OK 2、点击“下一步” 3、选择“我接受”后点击“下一步” 4、点击“下一步” 5、修改安装位置(尽量不要安装在C盘),点击“安装” 6、安装后点击“…...

Linux: 中断只被GIC转发到CPU0问题分析
文章目录1. 前言2. 分析背景3. 问题4. 分析4.1 ARM GIC 中断芯片简介4.1.1 中断类型和分布4.1.2 拓扑结构4.2 问题根因4.2.1 设置GIC SPI 中断CPU亲和性4.2.2 GIC初始化:缺省的CPU亲和性4.2.2.1 boot CPU亲和性初始化流程4.2.2.1 其它非 boot CPU亲和性初始化流程5.…...

模电学习10. MOS管简单应用电路
模电学习10. MOS管简单使应用电路一、开关和放大器1. 开关电路2. 放大电路二、时序电路中作为反相器使用三、双向电平转换电路1. 原理图2. 工作状态分析(1)分析SDA,信号从左向右(2)分析SDA,信号从右向左四、…...

轻松搞懂Linux中的用户管理
文章目录概念用户账户用户组用户权限用户管理工具概念 用户管理是Linux系统管理员必须掌握的重要技能之一。Linux系统是一个多用户操作系统,可以支持多个用户同时使用,每个用户拥有自己的账户和权限,因此管理员需要了解如何创建、管理和删除…...

力扣-丢失信息的雇员
大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:1965. 丢失信息的雇员二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他…...

FPGA采集AD7606全网最细讲解 提供串行和并行2套工程源码和技术支持
目录1、前言2、AD7606数据手册解读输入信号采集范围输出模式选择过采样率设置3、AD7606串行输出采集4、AD7606并行输出采集5、vivado仿真6、上板调试验证7、福利:工程代码的获取1、前言 AD7606是一款非常受欢迎的AD芯片,因为他支持8通道同时采集数据&am…...

CSS介绍
文章目录一. CSS介绍二. CSS的引入方式三. CSS选择器一. CSS介绍 定义: 层叠样式表作用: 美化界面: 设置标签文字大小,颜色,字体加粗等样式控制页面布局: 设置浮动,定位等样式 基本语法: 选择器{样式规则 } 样式规则: 属性名1: 属性值1 属性名2: 属性值2 属性名3: 属性值3 ..…...

Auto-encoder 系列
Auto-Encoder (AE)Auto-encoder概念自编码器要做的事:将高维的信息通过encoder压缩到一个低维的code内,然后再使用decoder对其进行重建。“自”不是自动,而是自己训练[1]。PCA要做的事其实与AE一样,只是没有神经网络。对于一个输入…...

【蓝桥杯入门不入土】变幻莫测的链表
文章目录一:链表的类型单链表双链表循环链表二:链表的存储方式三:链表的定义删除节点添加节点四:实战练习1.设计链表2. 移除链表元素最后说一句一:链表的类型 单链表 什么是链表,链表是一种通过指针串联在…...

axios的二次封装
方式一:将axios单独分装到某个配置文件中import axios from axios; const axiosApi axios.create({baseURL:http://127.0.0.1:3000,timeout:3000 }) export default axiosApi在组件中使用:import $http from axios配置文件的地址 $http.get(/student/test).then(re…...

GET与POST区别(最详细)
相同点:本质上都是TCP连接。 不同点:由于HTTP规定和服务器/浏览器限制,在应用过程中区别如下: 1.get产生一个TCP数据包,post 产生两个TCP数据包 get请求,浏览器会把http header和data一起发送,…...

精选博客系列|将基于决策树的Ensemble方法用于边缘计算
在即将到来的边缘计算时代,越来越需要边缘设备执行本地快速训练和分类的能力。事实上,无论是手机上的健康应用程序、冰箱上的传感器还是扫地机器人上的摄像头,由于许多原因,例如需要快速响应时间、增强安全性、数据隐私࿰…...

JS混淆加密:Eval的未公开用法
JavaScript奇技淫巧:Eval的未公开用法 作者:http://JShaman.com w2sft,转载请保留此信息很多人都知道,Eval是用来执行JS代码的,可以执行运算、可以输出结果。 但它还有一种未公开的用途,想必很少有人用过。…...

π型滤波器 计算_π型滤波电路
滤波器在功率和音频电子中常用于滤除不必要的频率。而电路设计中,基于不同应用有着许多不同种类的滤波器,但它们的基本理念都是一致的,那就是移除不必要的信号。所有滤波器都可以被分为两类,有源滤波器和无源滤波器。有源滤波器用…...

大数据常见术语
大数据常见术语一览 主要内容包含以下(收藏,转发给你身边的朋友) 雪花模型、星型模型和星座模型 事实表 维度表 上钻与下钻 维度退化 数据湖 UV与PV 画像 ETL 机器学习 大数据杀熟 SKU与SPU 即席查询 数据湖 数据中台 ODS,DWD&…...

带你了解“函数递归”
目录 1. 什么是递归? 2. 函数递归的必要条件 2.1 接收一个整型值(无符号),按照顺序打印它的每一位。 代码如下: 2.2 编写一个函数,不用临时变量求字符串长度 代码如下: 2.3 递归与迭代 …...

网络资源面经2
文章目录Kafka 原理,数据怎么平分到消费者生产者分区消费者分区Flume HDFS Sink 小文件处理Flink 与 Spark Streaming 的差异,具体效果Spark 背压机制具体实现原理Yarn 调度策略Spark Streaming消费方式及区别Zookeeper 怎么避免脑裂,什么是脑…...

4年经验来面试20K的测试岗,一问三不知,我还真不如去招应届生。
公司前段缺人,也面了不少测试,结果竟然没有一个合适的。一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在10-20k,面试的人很多,但平均水平很让人失望。看简历很多都是4年工作经验,但面试…...

K8S搭建NACOS集群踩坑问题
一、NACOS容器启动成功无法访问现象描述:通过K8S的statefulset启动,通过NodePort暴露不能在外网访问,只能在MASTER主节点访问。yaml配置:apiVersion: apps/v1 kind: StatefulSet metadata:name: nacos-${parameters.nameSpace}-dm…...

怎么避免计算机SCI论文的重复率过高? - 易智编译EaseEditing
论文成稿前 在撰写阶段就避免重复:在撰写阶段就避免文章中的重复内容,可以减少后期修改的工作量。 在写作前,可以制定良好的计划和大纲,规划好文章的结构和内容,从而减少重复内容。 加强对相关文献的阅读 为了避免自己…...

uni-app路由拦截
新建一个auth.js /** * description 权限存储函数 */ const authorizationKey Authorization export function getAuthorization() { return uni.getStorageSync(authorizationKey) } export function setAuthorization(authorization) { return uni.setStorageSync(aut…...

如何使用固态继电器实现更高可靠性的隔离和更小的解决方案尺寸
自晶体管发明之前,继电器就已被用作开关。从低压信号安全控制高压系统的能力,如隔离电阻监控,对于许多汽车系统的开发是必要的。虽然机电继电器和接触器的技术多年来有所改进,但设计人员要实现其终身可靠性和快速开关速度以及低噪…...

【YOLOv8/YOLOv7/YOLOv5系列算法改进NO.56】引入Contextual Transformer模块(sci期刊创新点之一)
文章目录前言一、解决问题二、基本原理三、添加方法四、总结前言 作为当前先进的深度学习目标检测算法YOLOv8,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系列…...

深圳大学计软《面向对象的程序设计》实验3 指针2
A. 月份查询(指针数组) 题目描述 已知每个月份的英文单词如下,要求创建一个指针数组,数组中的每个指针指向一个月份的英文字符串,要求根据输入的月份数字输出相应的英文单词 1月 January 2月 February 3月 March …...

【基于机器学习的推荐系统项目实战-2】项目介绍与技术选型
本节目录一、项目介绍1.1 采用的数据源1.2 Concrec架构技术选型1.3 Sprak介绍1.4 Flink1.5 TensorFlow一、项目介绍 1.1 采用的数据源 Kaggle Anime Recommendations Dataset。 其中的动漫数据源自myanimelist.net。 1.2 Concrec架构技术选型 数据预处理模块:汇总…...