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概念

java项目中entity Java项目中的POM主要用来描述_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包的。

java项目中entity Java项目中的POM主要用来描述_spring_02

  • groupId:公司或组织域名倒序
  • artifactId:模块名
  • version:版本号
  • packaging:项目的打包方式(pom/jar/war,默认jar)

对应的本都目录为:

groupId\artifactId\version\artifactId.version.packaging

依赖传递

如果我们的项目引用了一个Jar包,而该Jar包又引用了其他Jar包,那么在默认情况下项目编译时,Maven会把直接引用和间接引用的Jar包都下载到本地。

依赖机制能够大大的简化依赖声明,而且大部分情况下我们只需要关心项目的直接依赖是什么,而不用考虑这些直接依赖会引入什么传递性依赖,但是当出现冲突了,则需要很清楚传递性依赖是从什么依赖路径引入的。

java项目中entity Java项目中的POM主要用来描述_maven_03

为JavaMavenService2中增加了一个spring-core.jar包后,会惊喜的发现依赖的两个项目都自动的增加了这个jar包,这就是依赖的传递性。

maven仓库

Maven管理资源的位置。仓库里面包含依赖(jar包)和插件(plug-in)。Maven仓库分为本地仓库和远程仓库,而远程仓库又包括私服和中央仓库。

maven仓库

----本地仓库

----远程仓库

--------私服

--------中央仓库

--------其他公共库

本地地仓库

用户自己电脑上的仓库,直接从本地获取。

远程仓库

私服

私服是一种特殊的远程仓库,搭建在局域网内的仓库,私服代理广域网的仓库,提供给局域网内的用户使用,可用减少局域网内的用户与外界仓库的传输,每一个jar包只需要拉取一次就可以提供给局域网内所有的用户使用,并且也更加稳定。

jar包的下载顺序机制

java项目中entity Java项目中的POM主要用来描述_maven_04


仓库搜索顺序如下: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>

Maven创建和构建

maven的工作过程

java项目中entity Java项目中的POM主要用来描述_xml_05