maven 项目
Maven是一个项目管理工具,有两个核心功能:依赖管理(jar包管理)、项目构建(操作维护项目);
上述两个功能的实现是通过一个POM模型对象
来实现,该对象对应的是一个pom.xml
文件;
pom.xml是整个Maven中最核心最重要的文件。
Maven标准目录结构
若要使用Maven,那么项目的目录结构必须符合Maven的规范,其目录结构如下:
// java项目结构
/*
Java项目(模块)根目录
├── pom.xml
└── src
├── main
│ ├── java
│ └── resources
└── test
├── java
└── resources
*/
// javaweb项目结构
/*
javaweb项目(模块)根目录
├── pom.xml
└── src
├── main
│ ├── java
│ ├── resources
│ └── webapp
│ └── WEB-INF
│ └── web.xml
└── test
├── java
└── resources
*/
maven概念
POM
POM(Project Object Model)项目对象模型,一个项目所有的配置都放在POM文件中:定义项目的类型、名字、管理依赖关系,定制插件的行为等等。
Maven通过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">
<!-- MavenModel版本号,与Maven的版本号不是一回事 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司名称,一般是域名反写 -->
<groupId>com.jzh</groupId>
<!-- 项目名字 -->
<artifactId>yyyy</artifactId>
<!-- 项目版本号,SNAPSHOT 快照版 RELEASE 发行版 DEBUG 测试版 -->
<version>1.0-SNAPSHOT</version>
<!-- 该项目最终打包的方式 -->
<packaging>jar</packaging>
<!-- 导入依赖 -->
<dependencies>
<!--某一个具体的依赖坐标-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin></plugin>
</plugins>
</build>
</project>
坐标
在Maven中,坐标是jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的jar包。
groupId、artifactId、versioin简称GAV(Maven坐标),是用来唯一标识jar包的。
- groupId:公司或组织域名倒序
- artifactId:模块名
- version:版本号
- packaging:项目的打包方式(pom/jar/war,默认jar)
对应的本都目录为:
groupId\artifactId\version\artifactId.version.packaging
依赖传递
如果我们的项目引用了一个Jar包,而该Jar包又引用了其他Jar包,那么在默认情况下项目编译时,Maven会把直接引用和间接引用的Jar包都下载到本地。
依赖机制能够大大的简化依赖声明,而且大部分情况下我们只需要关心项目的直接依赖是什么,而不用考虑这些直接依赖会引入什么传递性依赖,但是当出现冲突了,则需要很清楚传递性依赖是从什么依赖路径引入的。
为JavaMavenService2中增加了一个spring-core.jar包后,会惊喜的发现依赖的两个项目都自动的增加了这个jar包,这就是依赖的传递性。
maven仓库
Maven管理资源的位置。仓库里面包含依赖(jar包)和插件(plug-in)。Maven仓库分为本地仓库和远程仓库,而远程仓库又包括私服和中央仓库。
maven仓库
----本地仓库
----远程仓库
--------私服
--------中央仓库
--------其他公共库
本地地仓库
用户自己电脑上的仓库,直接从本地获取。
远程仓库
私服
私服是一种特殊的远程仓库,搭建在局域网内的仓库,私服代理广域网的仓库,提供给局域网内的用户使用,可用减少局域网内的用户与外界仓库的传输,每一个jar包只需要拉取一次就可以提供给局域网内所有的用户使用,并且也更加稳定。
jar包的下载顺序机制
仓库搜索顺序如下:local_repo > settings_profile_repo > pom_profile_repo > pom_repositories > settings_mirror > central
配置仓库
仓库的配置只需要修改一个配置文件即可:maven安装目录下面的主配置文件conf/settings.xml
本地仓库
解压仓库的压缩包到某个目录,然后在settings.xml中配置如下内容:
解压我分享的仓库到下面配置的位置
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
重点是下面的内容
-->
<localRepository>D:\Develop\Repository\Maven_Repository</localRepository>
中央仓库镜像
配置阿里云对中央仓库的镜像,下载速度快。
注意放在被注释的mirrors
下面,小心层级关系
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
私服
建议在某个项目的pom.xml文件配置
在每个/某个模块的pom.xml文件中配置如下内容,粘贴在标签下即可
<!-- 为当前模块配置私服 -->
<repositories>
<repository>
<!-- 依赖仓库id,不可重复。repositories可以配置多个仓库,如果ID重复后面配置会覆盖之前的配置 -->
<id>dependencies_Repositories</id>
<!-- 私服仓库地址,即nexus仓库组的地址 -->
<url>http://192.168.33.240:8081/repository/maven-public/</url>
<!-- 是否下载releases构件 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否下载snapshots构件 -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<!-- 配置插件从私服下载 -->
<pluginRepositories>
<pluginRepository>
<id>plugins_Repositories</id>
<url>http://192.168.33.240:8081/repository/maven-public/</url>
<!-- 是否下载release版本构件 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否下载snapshots版本构件 -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>