1.Java开发项目需要做的工作?
1.分析项目要做什么,知道项目有哪些组成部分
2.设计项目,通过哪些步骤,哪些技术,需要多少人,多长时间
3.组建团队,招人,购置设备,服务器,软件等等
4.开发人员写代码,然后测试自己写的代码,重复。。
5.测试人员测试代码,重复
2.传统的项目开发的问题,没有使用maven管理
1.很多模块,模块之间有关系,手工管理关系,很繁琐
2.需要很多第三方功能,需要很多jar包,需要手工从网络获取jar包
3.需要管理jar包的版本
4.管理jar包之间的依赖,你的项目要使用a.jar ,需要使用b.jar里面的类,必须首先获取b.jar才可以,然后才能使用a.jar
3.改进项目开发,使用maven
1.maven可以管理jar文件
2.自动下载jar和它的文档,源代码
3.管理jar直接的依赖,a.jar需要b.jar。maven会自动下载b.jar
4.管理你需要的jar版本
5.帮你编译程序,把Java编译为class
6.帮你测试你的代码是否正确
7.帮你打包文件,形成jar文件,或者war文件
8.帮你部署项目
总结:管理jar包,编译,测试,打包,部署;
4.构建;项目的构建
构建是面向过程的,就是一些步骤,完成代码的编译,测试,运行,打包,部署等等。maven支持的构建包括有:
1.清理:把之间羡慕编译的东西删除掉(target),为新的编译代码做准备 mvn clean
2.编译:把程序源代码编译为执行代码(编译的是src/main下的Java),Java.class文件 mvn compile mvn test-compile
javac不一样,它一次只能编译一个文件
3.测试:maven可以执行测试程序代码,验证你的功能是否正常,批量的,maven同时执行多个测试代码,同时测试很多功能(测试的是test/java下的程序) mvn-test
4.报告:生成测试结果的文件,测试通过没有
5.打包:把你 的项目中的结果文件,通常是Java程序,压缩文件是jar扩展名的,对于web应用,压缩文件扩展名是.war mvn package
6.安装:把5中生成的文件jar/war安装到本机仓库 mvn install
7.部署:把程序安装好可以执行; mvn deploy
5.maven的核心概念:用好maven,用好这些概念
1.POM:一个文件,名称是pom.xml,pom(project object model)翻译过来叫做项目对象模型,maven把一个项目当一个模型使用,控制maven构建项目的过程,管理jar依赖;
2.约定的目录结构:maven项目的目录和文件的位置都是规定的
3.坐标:唯一的字符串,用来表示资源的(groupID,artifactID,version)
4.依赖管理;管理你的项目可以使用jar文件
5.仓库管理:(了解)你的资源存放的地方
6.生命周期:(了解)maven工具构建项目的过程
7.插件和目标:(了解)执行maven构建的时候使用的工具是插件
8.继承
9.聚合
6.maven工具的配置:
1.需要下载maven安装包,解压安装包,解压到一个非中文的目录
2.配置环境变量:在系统的环境变量中,指定一个M2_HOME的名称,指定它的值是maven工具安装目录,bin之前的目录;M2_HOME =E:\apache-maven\apache-maven-3.5.2,在把M2_HOME 加入到Path中
3.验证;在cmd中输入mvn -v
还不懂;https://www.bilibili.com/video/BV1dp4y1Q7Hf?p=6
7.maven约定的目录结构,约定是大家都遵循的一个规则
1)maven项目在磁盘中都是一个文件夹(项目-hello)
hello/
--/src
--/main #放主程序Java代码和配置文件
--/java #程序包和包中的Java文件
--/resource #Java程序中要使用的配置文件
--/test
--/java #测试程序包和包中的Java文件
--/resource #测试Java程序中要使用的配置文件
--/pom.xml #maven的核心文件(maven项目必须有)
8.疑问:mvn.compile编译src/main目录下所有的Java文件的
1.为什么要下载?
maven工具执行的操作需要很多插件
2.下载了什么?
jar文件--叫做插件--完成某些功能
3.下载的东西放到了哪里?
默认仓库中(本机仓库):C:\Users\Administrator\.m2\repository
执行mvn compile ,结果是在项目的根目录下生成一个target目录,叫结果目录,是maven编译的Java程序,最后的class
9.设置本机存放资源的目录位置;
1.先将Setting.xml备份;
2.E:\apache-maven\maven_repository拷贝
3.进入Setting.xml中,找到<localRepository>修改;注意格式;
10.仓库
1.仓库是什么?:是存放东西的,存放maven使用的jar包,,maven使用的插件和项目中使用的jar
2.仓库的分类:
1.本地仓库:就是你的个人电脑上的文件夹,存放各种jar
2.远程仓库:
1).中央仓库:在互联网上,使用网络才能使用的仓库,是做权威的,所有的开发人员都共享使用的一个集中的仓库;也叫中央仓库
2).中央仓库的镜像:就是中央仓库的备份,在各大洲,重要的城市都是镜像,目的是为了减轻中央仓库的压力;
3.私服:在公司内部,在局域网中使用,不对外使用;在公司中搭建一个服务器,用自己的服务器中的仓库;(有能力的公司推荐)
11.仓库的使用;maven仓库的使用【不需要人为参与】
开发人员需要使用MySQL的驱动--maven首先查本地仓库是否有对应的jar包--私服--镜像----中央仓库(直到找到为止)
12.pom:项目
groupId,artifactId和Version组成一个坐标,在互联网中标识唯一项目;每个项目必须有坐标;
<groupId>com.bjpowernode</groupId> #公司域名的倒写
<artifactId>welcome</artifactId> #自定义项目名称
<version>1.0-SNAPSHOT</version> #自定义版本号;
www.mvnrepository.com:搜索使用的中央仓库,使用groupid或者artifactID作为搜索条件;
packing:打包后压缩文件的扩展名,默认是jar,web应用是war,可以不写
dependencies和dependency;你的项目中要使用的各种资源说明;相当于是Java中的import
<dependencies>
<!--是我们项目中要使用的MySQL驱动jar包,我们从官网上利用坐标来获取文件,下载-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
</dependencies>
properties:定义一些配置属性,例如字符集等;
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>12</maven.compiler.source>
<maven.compiler.target>12</maven.compiler.target>
</properties>
build:maven在进行项目的构建时,配置信息,
13.maven生命周期,maven的命令,maven的插件
1.生命周期:就是maven构建项目的过程,清理,编译,测试,报告,打包,安装,都是
2.命令:maven独立使用,通过命令,完成maven的生命周期的执行、maven可以使用命令,完成项目的清理,编译,测试等;
3.插件:maven命令执行时,真正完成功能的是插件,插件就是一些jar文件,一些类
14.单元测试(测试方法);
1.Junit,是一个专门测试的框架(工具),测试的是类中的方法,每一个方法都是独立测试的;方法是测试的基本单位(单元);然后maven借助单元测试批量测试方法是否符合预期;
2.使用步骤:
1.加入依赖:在pom。xml中
2.在maven项目中的src/test/java 目录下,创建测试程序。推荐的创建类和方法的提示;
1.测试类的名称,是Test+你要测试的类名
2.测试的方法名称是:Test+方法名称;
例如你要测试hellomaven。创建测试类:Testhellomaven
@Test
public void testAdd(){
测试hellomaven的add方法是否正确
}
其中testadd方法叫做测试方法,它的定义规则
1.方法是public的,必须是;
2.方法没有返回值,必须是
3.方法名称是自定义的,推荐是Test+方法名称
4.在方法的上面加注释;@Test
15.mvn compile:maven默认会把src/main/resources下的所有配置文件以及src/main/java下的所有java文件打包或发布到target\classes下面
16.在IDEA中设置maven,让IDEA和maven结合使用。IDEA中有一个内置的maven,一般不使用内置的。因为内置的修改maven的配置不方便。使用自己安装的maven,需要覆盖IDEA的默认的设置,让IDEA指定maven的安装;
17.配置入口;settings(配置当前)--Build,Execution。Deployment--Build Tools--Maven--在这里我们配置maven的home,settings和本地仓库--Runner--配置jre和VM Option(填写 -DarchetypeCatalog=internal)
-DarchetypeCatalog=internal:maven项目在创建时,会联网下载一个模板文件,比较慢,加上后变快
个人总结:在使用idea创建maven项目时,要在maven的runner中要将Delegate IDE build/run actions to Maven勾选,它的意思是将ide构建/运行操作委托给maven ,如果不勾选,就会报报错程序包xxx不存在的异常!请重视
18.使用模板创建普通的JavaSe项目;maven-archetype-quickstart
创建web工程:maven-archetype-webapp
19.Reimport:重新导入,相当于刷新功能,用于项目中内容的更变时IDEA没响应;
20.依赖范围;使用scope表示
1.scope的值有;compile ,test ,provided 默认是compile
2.scope表示依赖使用的范围,也就是在maven构建项目的那些阶段中起作用
maven构建项目:清理 编译 测试 打包 安装 部署
举例:
//Junit依赖的范围是test阶段
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
compile;所有阶段都会用到,
provided:编译 测试阶段要用,后续阶段不要用;(也就是Tomcat本身有,不需要自带)
21.在pom文件中添加依赖,maven会时刻自动检测pom文件,所以,当我们在pom文件中添加依赖,maven会自动下载依赖存入本地仓库;
22.maven的常用操作:
1.maven的属性设置:<properties>设置maven的常用属性
2.maven的全局变量:1.在<properties>通过自定义标签声明变量(标签名就是变量名)
2.在pom.xml文件中的其他位置,使用${标签名}使用变量的值;
3.自定义全局变量一般是定义依赖的版本号,当你的项目中要使用多个相同的版本号,先使用全局变量定义,在使用${变量名}
3.资源插件:
<resources>
<resource>
<!-- 指定resources插件处理哪个目录下的资源文件 -->
<directory>src/main/java</directory>
<!--注意此次必须要放在此目录下才能被访问到 -->
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/*.properties</include>
<include>**/*.xml<include>
</includes>
</resource>
</resources>
在mybatis课程中涉及到;默认没有使用resources的时候,maven默认会把src/main/resources下的所有配置文件以及src/main/java下的所有java文件打包或发布到target\classes下面,但是,项目中我们有时需要在src/main/java下存放其他的xml文件,例如mapper映射文件,要想把这些xml文件也编译到target/classes目录下,就需要使用resources资源插件,通知maven;
2.我们的程序有需要把一些文件放在:src/main/java目录中,当我们在执行Java程序时,需要用到src/main/java目录中的文件,就要告诉麻烦在mvn.compile src/main/java目录下的程序时,需要把文件一同拷贝到target/classes目录中,此时就需要在<build>中加入<resources>
23.个人遇到的问题:artifact 定义时不能有空格!
主要类的介绍
1.InputStream in = Resources.getResourceAsStream(config);
Resources是mybatis中一个类,负责读取主配置文件mybatis.xml
2.SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
SqlSessionFactoryBuilder:负责创建SqlSessionFactory对象,
3.SqlSessionFactory factory = builder.build(in);
SqlSession sqlSession = factory.openSession();
SqlSessionFactory是重量级对象,程序创建这个对象耗时长,耗资源,在整个项目中,有一个就够用了
SqlSessionFactory是一个接口,接口实现类:DefaultSqlSessionFactory
SqlSessionFactory的作用是获取SqlSession对象
openSession()作用:
1.openSession():无参数,获取非自动提交事务的sqlsession
2.openSession(boolean):如果是TRUE,是自动提交事务;
4.SqlSession接口:定义了操作数据的方法,例如:selectOne(),selectList(),insert(),updata(),commit(),rollback()...
使用要求:SqlSession对象不是线程安全的,需要在方法内部使用,在执行sql语句之间,使用openSession()获取SqlSession,在执行完sql语句后,关闭它,这行SqlSession.close,这样才确保线程安全;
5.在开发中一定要注意:在Java下的包中的配置文件maven不会加载到target中,需要在pom中定义资源插件resource