Maven基础之基本使用
一、 目标Maven构建Maven多模块功能二、 什么是mavenMaven是一个跨平台的项目管理工具,主要用于基于java平台的项目构建,依赖管理。解决的项目的问题:如果有好几个项目,这好几个项目中,需要用到很多相同的jar包,能不能只建立一个仓库来解决这个问题?测试方法能不能全部运行呢?怎么样把一个模块的功能放入到仓库中三、 Maven的安装与配置Maven的安装 :Jdk必须1.6以上的版本
一、 目标
Maven
构建Maven多模块功能
二、 什么是maven
Maven是一个跨平台的项目管理工具,主要用于基于java平台的项目构建,依赖管理。
解决的项目的问题:
- 如果有好几个项目,这好几个项目中,需要用到很多相同的jar包,
能不能只建立一个仓库来解决这个问题?
-
测试方法能不能全部运行呢?
-
怎么样把一个模块的功能放入到仓库中
三、 Maven的安装与配置
Maven的安装 :
- Jdk必须1.6以上的版本
- 从http://maven.apache.org/官网上下载最新版本的maven
设定path路径 :
- 把下载下来的maven解压缩,然后有一个bin文件夹,这是一个bin的文件夹的目录F:\work\course\maven\maven\bin
- 把该目录追加到环境变量的path中。
- 输入mvn -v 查看版本
建库:
- 打开路径C:\Users\Think.m2
- 把settings.xml文件复制到上述的路径中F:\work\course\maven\apache-maven-3.0.5-bin\apache-maven-3.0.5\conf有一个settings.xml文件,复制到C:\Users\Think.m2
- 修改settings.xml文件,F:/work/course/maven/mavenRepository/
- 指定仓库的路径(在这里mavenRepository就是仓库的路径)
maven配置:
maven的约定:
- src/main/java 存放项目的java文件
- src/main/resources 存放项目的资源文件,如spring,hibernate的配置文件
- src/test/java 存放所有的测试的java文件
- src/test/resources 存放测试用的资源文件
- target 项目输出位置
- pom.xml 文件
四、 maven项目
4.1 hello项目
4.1.1 新建maven项目
4.1.2 编写Hello类
public class Hello {
public void hello(){
System.out.println("我是maven项目....");
}
}
在src/test/java中创建一个包cn.itcast.maven,创建一个测试类HelloTest
4.1.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">
<!--project:表示一个工程
modelVersion:为版本号-->
<!--maven版本 dtd对应-->
<modelVersion>4.0.0</modelVersion>
<!--组织 这是项目组的编号,这在组织或项目中通常是独一无二的。-->
<groupId>com.scxd</groupId>
<!--项目名字 这是项目的ID。这通常是项目的名称。-->
<artifactId>mavendemo</artifactId>
<!--版本 这是项目的版本。-->
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
4.1.4 maven命令
1. mvn compile 编译项目
target文件夹的变化
2. mvn clean 清除编译
target文件夹消失
3. mvn test 编译测试文件
说明:
- target/classes 存放编译后的类
- target/test-classes 存放编译后的测试类
- target/surefire-reports 存放测试报告
可以看出,只要进行测试,清理和编译可以自动执行了。
4. mvn package 根据pom中的package打包
说明:
- target/classes 编译后的类的路径
- target/test-classes 编译后的测试类的路径
- target/surefire-reports 测试报告
- target/maven-archiver 执行package的归档
- Hello-0.0.1-SNAPSHOT.jar 执行完package命令后打成的jar包
5. mvn install 打包到mvn本地仓库
4.2 Hellofriend项目
4.2.1 建立HelloFriend项目工程
4.2.2 编写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.scxd</groupId>
<artifactId>mavendemo02</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--将打到本地的包导入-->
<dependency>
<groupId>com.scxd</groupId>
<artifactId>mavendemo</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
如果没有将hello项目打包的本地,执行mvncompile会报错,因为HelloFriend项目是建立在Hello项目基础之上的,但是现在工程中没有引入Hello.java这个类
解决方法:
- 打开命令行
- 把当前路径调节到Hello工程的根目录
- 执行mvn clean install命令,把Hello整个工程放入到仓库中
执行mvn package命令打包HelloFriend工程
可以看到成功以后,在target目录下多了一个jar包
该jar包为当前工程的jar包。
4.2.3 编辑HelloFriend类
public class HelloFriend {
public void helloFriend(){
//导入mavendemo项目中的类
Hello hello = new Hello();
hello.hello();
}
public static void main(String[] args) {
Hello hello = new Hello();
hello.hello();
}
}
运行测试 会打印:我是maven项目…
五、 maven的核心概念
5.1 项目对象模型
说明:
- maven根据pom.xml文件,把它转化成项目对象模型(POM),这个时候要解析依赖关系,然后去相对应的maven库中查找到依赖的jar包。
- 在clean,compile,test,package等阶段都有相应的Plug-in来做这些事情。
- 而这些plug-in会产生一些中间产物。
5.2 插件的位置
在maven解压后的位置maven有一个bin文件夹,里面有
一个文件m2.config文件其中settings.xml文件中
设置本地仓库位置:
<localRepository>G:\java_environment\idea\Repository</localRepository>
设置依赖下载地址:
<mirrors>
<!-- mirror
| Specifies a repository mirror site to use instead of a given repository. The repository that
| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
| for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
|
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
-->
<!-- 淘宝镜像-->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
5.3 maven坐标
maven坐标的主要组成:
- groupId:定义当前maven项目属于哪个项目
- artifactId:定义实际项目中的某一个模块
- version:定义当前项目的当前版本
- packaging:定义当前项目的打包方式
5.4 依赖管理
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
</dependency>
</dependencies>
5.5 继承管理
5.5.1 创建项目
5.5.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.scxd</groupId>
<artifactId>maven_parent_hello</artifactId>
<version>1.0-SNAPSHOT</version>
<!--<packaging>pom</packaging> 父类型都为pom类型
<packaging>jar</packaging> 内部调用或者是作服务使用
<packaging>war</packaging> 需要部署的项目-->
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>com.scxd</groupId>
<artifactId>maven_hello</artifactId>
<version>1</version>
</dependency>
</dependencies>
</project>
5.6 仓库管理
可以根据maven坐标定义每一个jar包在仓库中的存储位置
大致为:groupId/artifactId/version/artifactId-version.packaging
5.6.1 仓库的分类
本地仓库:
每一个用户也可以拥有一个本地仓库(~/.m2/repository/)
远程仓库:
- 中央仓库:Maven默认的远程仓库(http://repo1.maven.org/maven2)
- 私服:是一种特殊的远程仓库,它是架设在局域网内的仓库
- 镜像:用来替代中央仓库,速度一般比中央仓库快
六、 maven的应用
6.1 环境配置
6.2 配置settings.xml文件
上面有
6.3. 配置私服的路径
上面有
如果不想连接私服,可以直接连接互联网。只需要把连接私服的所有的路径去掉即可。
6.4 创建maven工程
6.4.1 创建java project
-
选择Maven Project
-
选择快速创建maven-archetype-quickstart
-
填写group ID,Artiface Id,Version,Package属性
-
然后点击finish就可以了
6.4.2 创建web project
- 选择创建maven-archetype-webapps
其他一样
-
完成后,得到的目录树是没有java代码目录的,也没有测试代码目录和resources目录,都需要自己配所以可以学习自定义骨架)
-
选择 File -> Project Structure
-
选择左边的Moduels, 子窗口选择Sources, 这就是项目目录,选择对中间的目录鼠标右键新建即可,然后 src/main/java设置为蓝色(就选中这个目录时,点击上面的Marks as -> Resources[blue]), 还有测试绿色,资源是resources.
-
配置服务容器tomcat或者jetty
七、 Maven建立(聚合)多模块功能
1. 创建空项目
file–>new project–>Empty project
创建父模块
file–>new–>Moudle–>Maven–>下图父工程(pom)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gHORPzZB-1590572234917)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200121134023778.png)]
2.创建java项目子模块
file–>new–>Moudle–>Maven–>上图java工程(jar)
3.创建web项目子模块
file–>new–>Moudle–>Maven–>上图web工程(war)
在将parent中的src删除
4.目录结构
maven-parent 父工程
maven-service 业务逻辑层
maven-web web层
5.启动方式
添加tomat启动即可
八、 Maven打包原理
8.1 Maven中央存储库
当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定有哪些依赖下载。
首先,Maven 将从本地资源库获得 Maven 的本地资源库依赖资源,如果没有找到,然后把它会从默认的 Maven 中央存储库http://search.maven.org/查找下载。
在Maven中,当你声明的库不存在于本地存储库中,也没有不存在于Maven中心储存库,该过程将停止并将错误消息输出到 Maven 控制台。
8.2 添加远程仓库
默认情况下,Maven从Maven中央仓库下载所有依赖关系。但是,有些库丢失在中央存储库,只有在Java.net或JBoss的储存库远程仓库中能找到。
现在,Maven的依赖库查询顺序更改为:
在 Maven 本地资源库中搜索,如果没有找到,进入下一步,否则退出。
在 Maven 中央存储库搜索,如果没有找到,进入下一步,否则退出。
在Maven的远程存储库搜索,如果没有找到,提示错误信息,否则退出。
九、 常用错误
错误原因①:
pom.xml报错:web.xml is missing and is set to true
解决办法:
出现这个错误的原因是Maven不支持缺少web.xml的web项目
添加Web模块,对项目右键->****Java EE**** Tools->Generate Deployment Descriptor Stub,这样就在
src\main\webapp下面生成了WEB-INF文件夹和web.xml,问题解决.
错误原因②
‘parent.relativePath’ and ‘parent.relativePath’ points at wrong local POM @ line 4, column 10
在应用parent工程中加上
<relativePath>../maven-parent/pom.xml</relativePath>
<parent>
<groupId>com.itmayiedu</groupId>
<artifactId>itmayiedu-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../itmayiedu-parent/pom.xml</relativePath>
</parent>
错误原因③:
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
错误原因②
‘parent.relativePath’ and ‘parent.relativePath’ points at wrong local POM @ line 4, column 10
在应用parent工程中加上
<relativePath>../maven-parent/pom.xml</relativePath>
<parent>
<groupId>com.itmayiedu</groupId>
<artifactId>itmayiedu-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../itmayiedu-parent/pom.xml</relativePath>
</parent>
错误原因③:
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
解决办法 更换为自己本地的jdk即可
更多推荐
所有评论(0)