文章目录
前言
🌞博主介绍:✌全网粉丝15W+,CSDN特邀作者、211毕业、高级全栈开发程序员、大厂多年工作经验、码云/掘金/华为云/阿里云/InfoQ/StackOverflow/github等平台优质作者、专注于Java、小程序技术领域和毕业项目实战,以及程序定制化开发、全栈讲解、就业辅导✌🌞
👇🏻 精彩专栏 推荐订阅👇🏻
2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选题推荐✅2023-2024年最值得选的Java毕业设计选题大全:500个热门选题推荐✅
💯文末获取源码+数据库💯
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
Maven
功能
项目构建
项目构建是指一个项目从编写代码,到编译,到测试,到打包,到上线等一系列的步骤。
依赖管理
项目管理其实就是可以帮助我们去管理我们的项目。
其实就是管理我们的项目的依赖。帮助我们把项目的依赖集中的管理起来。
安装Maven
下载
注意,Maven的版本和Idea的版本以及JDK的版本是对应的。
JDK: JDK8
IDEA: 2018.3.6
Maven: 3.5.3
解压
安装的软件的解压路径里面不要有中文,不要有特殊字符(例如空格 等等)
配置环境变量
在path中添加根目录的路径名
mvn -v
用来检测
配置maven
-
本地仓库
-
中央仓库
-
配置本地仓库
在maven的根目录下的conf文件夹中有一个settings.xml配置文件,需要配置一个 本地仓库
<localRepository>D:\maven\repo</localRepository>
- 配置中央仓库
在 标签里面加入以下内容
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
配置idea中maven的配置
创建maven工程
手动
maven项目的要求:
1. 所有的源代码都放在 src/main/java 路径下
2. 所有的配置文件都放在 src/main/resources 路径下
3. 所有的测试案例源代码都放在 src/test/java路径下
4. 所有的测试需要的配置文件都放在 src/test/resources 路径下
- 每一个maven项目在项目的根目录下必须得有一个pom.xml文件
- maven的项目编译的文件存放的路径必须是 项目根目录下的target文件夹
-
新建一个java项目
-
新建文件夹
-
标记对应的文件夹
在项目结构中标记
-
新建一个pom.xml文件
在项目的跟目录下去新建一个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"> <!-- 上面的这些路径其实就是一些 约束文件 这些约束文件其实就是定义了这个xml文件中可以出现什么标签,以及标签出现的顺序 --> <!-- 不用改 --> <modelVersion>4.0.0</modelVersion> <!-- maven 项目的坐标 --> <!-- 组织名 通常来说是域名反转--> <groupId>com.cskaoyan</groupId> <!-- 应用名 你这个项目的名字 --> <artifactId>mybatis-demo</artifactId> <!-- 版本号 0.0.1 0.x 的版本通常来说是不稳定版 x.x.x-beta 线上测试版(不稳定的) x.x.x- SNAPSHOT 快照版 可以理解为稳定版 --> <version>1.0.0</version> </project>
- 让idea识别你的项目为maven工程
- 右键 pom.xml文件,
add as maven project
- 右键 pom.xml文件,
- 让idea识别你的项目为maven工程
使用idea来创建
只需要注意项目名称和artifactId保持一致
使用Maven工程
项目构建
Maven可以用来管理项目的声明周期。
Maven定义的声明周期 包括了 清理、编译、测试、打包、安装、站点部署等一套完整的流程。
执行命令有几种方式:
- 打开cmd窗口,进入到这个module的根目录下,执行命令
- 打开idea,在右边有一个控件栏,打开lifecycle,双击执行对应的指令
- 打开idea,在下面有一个 terimal插件栏,打开,执行对应的命令
maven的项目构建的流程是从validate开始的。
例如我们要去执行package,会先执行 validate -> compile -> test - > package
是有一个流程的先后顺序的。
-
清理 帮助我们去删除编译生成的target文件夹
mvn clean
-
编译 编译其实就是帮助我们把.java 文件变成 .class文件,并且把对应的配置文件也复制过去
mvn compile
编译之后有对应的目录
注意在编译完成后,所有的java文件和配置文件都会放入classes文件中
java文件相当于是源代码路径,这和普通的src是一致的
-
测试 测试其实就是去运行这个项目中所有的测试类的测试方法
mvn test
在执行mvn test的时候,会先去编译,执行所有的测试类里面的测试方法
-
打包 打包其实就是把我们项目打包成 .jar (jar 包) 或者是 .war (war 包)
mvn package
默认是打jar包,如果需要打war包,那么就去修改 pom.xml文件的配置
<!-- 默认配置的是 jar -->
<packaging>war</packaging>
5.安装 其实就是把打包生成的jar包复制到本地仓库中去
mvn install
-
部署 站点生成,其实就是帮助我们把本地仓库中的jar包上传到服务器上去
mvn deploy
这个命令不是重点,因为在公司中,一般不采用mvn来部署项目(jenkins\ docker \ k8s )
依赖管理
如何导包
-
找到对应jar包的坐标
去maven的网站中搜索 https://mvnrepository.com/
-
复制坐标到pom.xml文件中
scope的传递范围
cope指的是这个依赖的包的作用域
-
compile
这个是默认的作用域。在编译的时候起作用,在任何时候任何地方都是有效的。
-
provided
编译的时候有效、测试的时候有效,但是运行的时候失效
-
test
这个是测试案例的作用域,这个test修饰的依赖只能在 src/test/java 路径下才能生效
-
runtime
runtime修饰的jar包,在编译的时候,不起作用,只有在运行的时候,才会起作用
典型的案例 就是mysql的驱动包。
依赖传递
项目A的依赖中有项目B,项目B的依赖有项目C,所以项目A的依赖中也有项目C
依赖冲突
在同一个项目中对于同一个jar包的不同版本,我们只需要一个版本,如果导入多个版本就会造成冲突
-
声明优先原则
谁写在前面就以谁为准
-
就近原则
谁的传递次数最少以谁为准
-
手动排除
-
提取常量
补充配置
需要把以下的配置添加到 settings.xml文件中,主要是去指定我们使用maven编译的时候jdk的版本
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
解决test方法乱码
<build>
<plugins>
<!-- 解决maven test命令时console出现中文乱码乱码 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.7.2</version>
<configuration>
<forkMode>once</forkMode>
<argLine>-Dfile.encoding=UTF-8</argLine>
<!-- <systemProperties> -->
<!-- <property> -->
<!-- <name>net.sourceforge.cobertura.datafile</name> -->
<!-- <value>target/cobertura/cobertura.ser</value> -->
<!-- </property> -->
<!-- </systemProperties> -->
</configuration>
</plugin>
</plugins>
</build>
使用maven来开发
和之前不一样的地方
-
导包方式不一样
-
代码写的位置、配置文件存放的位置不一样
-
读取配置文件的输入流的方式不一样
现在的读取方式:
// 初始化数据源
static {
Properties properties = new Properties();
try {
// 绝对路径的写法,不好
// InputStream in = new FileInputStream("E:\\cskaoyan\\35workspace\\workspace_35\\druid-maven-demo\\src\\main\\resources\\druid.properties");
// 我们在maven的项目中,需要使用类加载器去找文件的路径
ClassLoader classLoader = DruidUtils.class.getClassLoader();
// 类加载去找文件的时候,因为类加载是从classes文件夹开始加载的,所以会从classes文件夹下开始加载
InputStream inputStream = classLoader.getResourceAsStream("druid/druid.properties");
// URL url = classLoader.getResource("druid/druid.properties");
// String path = url.getPath();
//
// System.out.println("path:" + path);
// /E:/cskaoyan/35workspace/workspace_35/druid-maven-demo/target/classes/druid.properties
properties.load(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
project和module的区别与联系
-
project
一个项目是IDEA开发工作的顶级组织单位。在其完成的形式中,一个项目可能代表一个完整的软件解决方案
项目是以下内容的集合:
- 你的工作成果:源代码、脚本、配置文件、文档、工件等。
- 用于开发、编译、运行和测试代码的SDK和库。
- 在项目上下文中表示你的工作偏好设置
一个项目有一个或者多个模块作为其部件
-
module
- 模块是项目的一部分,你可以独立的编译、运行、测试和调试。
- 模块是一种在维护公共项目配置的同事降低大型项目复杂性的方法。
- 模块可以重复使用:如果需要,可以再多个项目中包含一个模块。
总结一下:Project是IDEA的最顶级的结构单元,project只是起到了一个项目定义的功能,类似于工作空间的概念,这个工作空间可以去配置你的IDEA的一些公共配置,例如SDK、代码库等。module是project的一部分,可以用来单独编译运行等,每一个module项目运行的时候都是一个单独的Java进程。IDEA创建项目的时候会默认创建一个同名的module,实际上我们开发写代码都是在开发这个module。
源码获取
有疑问私信询问我即可~
大家点赞、收藏、关注、评论啦
精彩专栏推荐订阅:在下方专栏👇🏻
Java精品实战案例《500套》
微信小程序项目精品案例《500套》