https://www.bilibili.com/video/BV14j411S76G?p=1&vd_source=5c648979fd92a0f7ba8de0cde4f02a6e
Maven翻译为"专家"、“内行”,是Apache下的一个纯Java开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。Maven是一个项目管理工具,可以对Java项目进行构建、依赖管理。Maven也可被用于构建和管理各种项目,例如C#,Ruby,Scala和其他语言编写的项目。Maven曾是Jakarta项目的子项目,现为由Apache 软件基金会主持的独立Apache 项目。
通过Maven,可以帮助我们做:
Maven也需要安装环境,但是IDEA已经自带了Maven环境,因此我们不需要再去进行额外的环境安装((无IDEA也能使用Maven,但是配置过程很麻烦,并且我们现在使用的都是IDEA的集成开发环境,所以这里就不讲解Maven命令行操作了)我们直接创建一个新的Maven项目即可。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9m7b332o-1690375786144)(maven学习.assets/image-20230726165124192.png)]
其实本身就是一个Java项目。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F1OMCZvc-1690375786145)(maven学习.assets/image-20230726165304209.png)]
maven的项目结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5yrges6P-1690375786145)(maven学习.assets/image-20230726165319415.png)]
groupId 、artifactId 、 version这三个元素合在一起,用于唯一区别每个项目,别人如果需要将我们编写的代码作为依赖,那么就必须通过这三个元素来定位我们的项目,我们称为一个项目的基本坐标,所有的项目一般都有自己的Maven坐标,因此我们通过
Maven导入其他的依赖只需要填写这三个基本元素就可以了,无需再下载Jar文件,而是Maven自动帮助我们下载依赖并导入。
基本的参数
4.0.0
org.example
maven_study
1.0-SNAPSHOT
8
8
导入别的依赖的话本质就是导入
xxx
xx
xxx
创建一个结点,可以导入我们需要的依赖。
下载个依赖为例
org.projectlombok
lombok
1.18.26
provided
使用我们的导入的依赖
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private String name;
private String password;
}
创建测试文件
public class TestMain {
public static void main(String[] args) {
System.out.println("你好");
User user=new User();
user.setName("张三");
user.setPassword("123465");
user.setId(1);
System.out.println(user.toString());
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jNZiG99u-1690375786146)(maven学习.assets/image-20230726170347115.png)]
下面的这个网站可以告诉你常见的依赖的地址,用到什么就可以搜索什么。
https://mvnrepository.com/
仓库的基本原理图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y6lANXvK-1690375786147)(maven学习.assets/image-20230726165929502.png)]
本地有的话,下次用到的时候会自动地进行导入地,不需要再去下载了。默认先去本地仓库中去寻找依赖进行导入。
原先maven设置的仓库的地址是远程的,现在需要换成国内的地址。
nexus-aliyun
*,!jeecg,!jeecg-snapshots
Nexus aliyun
http://maven.aliyun.com/nexus/content/groups/public
或者是下面的形式都是一样的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fT2DZuSZ-1690375786147)(maven学习.assets/image-20230726170818427.png)]
此时下载依赖的时候全部的依赖全部是从国内的地址中去下载不需要从国外的地址中去下载了。
1.依赖的基本属性
前面了解到了依赖的基本的形式
下面将会了解更多的属性
2.scope属性内容。决定了依赖的作用域的范围。
compile:编译、运行和测试均有效。
provided:在编译和测试的时候有效,运行的时候无效。也就是说运行的时候不需要该依赖。像lombox在编译的时候用到,编译完成之后生成代码了之后,就转换成代码了,不需要进行使用了。
runtime:运行和测试有效。编译时候无效,像jdbc。
test:仅仅在测试时候有效。像junit依赖。
org.junit.jupiter
junit-jupiter
5.8.2
test
3.编写测试类
public class TestJava {
@Test
void test(){
System.out.println("测试");
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VVzkCEvA-1690375786147)(maven学习.assets/image-20230726172113396.png)]
4.添加连接数据库的文件
mysql
mysql-connector-java
5.1.49
runtime
org.mybatis
mybatis
3.5.9
5.资源文件夹下内容的创建。
mybatis的基本教程
http://c.biancheng.net/mybatis/config.html
6.编写mapper
@Mapper
public interface UserMapper {
@Select("select * from user where id=#{id}")
User getUserById (String id);
}
7.编写测试类
public class TestMain {
public static void main(String[] args) throws Exception{
SqlSessionFactory factory=new SqlSessionFactoryBuilder()
.build(Resources.getResourceAsStream("mybatis-config.xml"));
SqlSession session=factory.openSession(true);
UserMapper userMapper=session.getMapper(UserMapper.class);
System.out.println(userMapper.getUserById("1"));
}
}
补充一个要是只是一个本地jar怎么办呢。也就是远程没有这个jar的依赖。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pSLPO6NM-1690375786148)(maven学习.assets/image-20230726174619121.png)]
当项目中的某些依赖不希望被使用此项目作为依赖的项目使用时,我们可以给依赖添加optional标签表示此依赖是可选的,默认在导入依赖时,不会导瓜可选的依赖:
https://www.bilibili.com/video/BV14j411S76G/?p=3&spm_id_from=pageDriver&vd_source=5c648979fd92a0f7ba8de0cde4f02a6e
true
exclusions可以设置排除依赖。排除某个依赖。
org.mybatis
mybatis
3.5.9
org.slf4j
slf4j-api
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vn4YVMJg-1690375786148)(maven学习.assets/image-20230726202031575.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JXeyMifr-1690375786148)(maven学习.assets/image-20230726202210902.png)]
要是父子项目,夫设置option为true不耽误子项目的继承。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h3RUFtvV-1690375786149)(maven学习.assets/image-20230726202250475.png)]
放到dependencies的全部都是强制继承的。
但是放到dependencyManagement不是强制继承的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yh7kD3GD-1690375786149)(maven学习.assets/image-20230726202634362.png)]
子项目导入的时候不需要指定对应的版本号就可以。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1nn1C8Qs-1690375786149)(maven学习.assets/image-20230726202729991.png)]
可以避免写命令行了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HmtqI985-1690375786150)(maven学习.assets/image-20230726204229538.png)]
verify:
deploy:发布到本地和远程仓库的,公司一般有私服的。
site:生成当前项目的发布站点。
对于存在依赖关系的项目的话,a依赖于b,打包a的话,同时会把b打包进去。会生成两个jar文件