maven总结(三)-- pom.xml文件,maven中的关系,私服

一. pom.xml文件

1.1 简介

  pom:project object model 项目对象模型
  pom.xml是Maven的核心配置文件
  一个Maven项目有且只有一个pom.xml文件,该文件必须在项目的根目录下

1.2 坐标

1.2.1 什么是坐标
  (1)用来唯一的标识每个标识,必须为项目定义坐标,坐标必须唯一
  (2)目的是为了让其他Maven项目可以使用该项目生成的jar包

1.2.2 坐标详解
  Maven坐标是通过一些元素来定义:groupId、artifactId、version

 1 <!­­
 2 坐标:
 3 groupId:组织Id,表示当着模块所隶属的项目
 4 artifactId:模块id
 5 version:当前的版本
 6 ­­>
 7 <groupId>com.wfz.study</groupId>
 8 <artifactId>maven01</artifactId>
 9 <version>1.0­SNAPSHOT</version>

1.3 依赖

1.3.1 基本配置

   如何查找一个jar包的坐标?
  http://search.maven.org/ http://mvnrepository.com/ http://maven.aliyun.com/nexus/#

 1.3.2 如何查找一个坐标

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql­connector­java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>commons­fileupload</groupId>
<artifactId>commons­fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency

1.3.3  scope作用域

扫描二维码关注公众号,回复: 4872481 查看本文章

 表示依赖的作用域,用来配置依赖的jar包可使用的范围

取值 含义 举例

compile
该依赖可以在整个项目中使用,参与打包部署,默认值 commons­fileupload

test
该依赖只能在测试代码中使用,不参与打包部署  junit


provided
该依赖编写源代码时需要,不参与打包部署 servlet­api、jsp­api

runtime
该依赖编写代码时不需要,运行时需要,参与打包部署 mysql­connector

system
表示使用本地系统路径下的jar包,需要和systemPath一起使用 ojdbc.jar ojdbc.jar



                                                                                                                                                                                                                    

1.3.4  properties
全局属性,一般情况下用于定义全局的jar包版本

<properties>
<project.build.sourceEncoding>UTF­8</project.build.sourceEncoding>
<fileupload.version>1.3.1</fileupload.version>
<junit.version>4.12</junit.version>
<mysql­connector­java.version>5.1.38</mysql­connector­java.version>
<spring.version>4.3.12.RELEASE</spring.version>
</properties>
<dependencies>
<!­­ junit ­­>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>

 1.3.5 repositories

用来配置当前工程使用的远程仓库
依赖查找顺序:本地仓库——>当前工程pom.xml中配置的远程仓库——>setting.xml中配置的远程仓库

<!­­ 配置远程仓库 ­­>
<repositories>
<!­­ 有些最新的jar包,可能在中央仓库上并没有提供,此时可以使用jar包官方提供的仓库 ­
­>
<repository>
<id>spring_repo</id>
<url>http://repo.spring.io/milestone</url>
</repository>
</repositories>
<!­­ maven­clean­plugin­­>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven­clean­plugin</artifactId>
<version>2.6.1</version>
</plugin>
<!­­ tomcat插件 ­­>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7­maven­plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/maven01</path>
<port>8888</port>
</configuration>
</plugin>

1.3.6  plugins
  配置插件,是一种工具,项目并不依赖于它。比如:

  • maven­clean­plugin
  • maven­compile­plugin
<!­­ maven­clean­plugin­­>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven­clean­plugin</artifactId>
<version>2.6.1</version>
</plugin>
<!­­ tomcat插件 ­­>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7­maven­plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/maven01</path>
<port>8888</port>
</configuration>
</plugin>

 1.3.7 超级POM

  所有的pom.xml文件都继承一个父POM,这个父POM称为超级POM(Super POM、Effective POM)

 二. Maven中的关系

2.1 继承

  一个Maven项目可以继承自另一个Maven项目,分为称为子项目、父项目
  场景:多个子项目中使用的是相同的依赖或插件,此时可以把相同的配置抽取到一个父项目中,进行统一的管理,保持一致性

步骤:
1. 将父项目的打包方式设置为pom

<!­­
打包方式:
jar:Java项目的打包方式,默认值
war:Web项目的打包方式
pom:父项目的打包方式
­­>
<packaging>pom</packaging>

 2. 在子项目中引用父项目,指定父项目的坐标

<!­­ 引用父项目,指定父项目的坐标 ­­>
<parent>
<groupId>com.wfz.study</groupId>
<artifactId>parent</artifactId>
<version>1.0­SNAPSHOT</version>
<!­­ 指定父项目的pom.xml文件的相对物理路径 ­­>
<relativePath>../parent/pom.xml</relativePath>
</parent>

 问题:有时并不是父项目的所有依赖都需要被子项目继承,但是又希望能够通过父项目对依赖进行统一管理,如版本的控制

解决:

使用dependencyManagement

步骤:1. 在父项目中配置dependencyManagement

    dependencies:如果不用dependencyManagement做依赖管理的话,父工程的所有依赖都是可以被子工程继承的(但特殊情况除外:scopecompile的依赖会被传递,scopetest的依赖不会被传递,配置optionaltrue的依赖不会被传递等)
    问题:有时并不是父项目的所有依赖都需要被子项目继承,但是又希望能够通过父项目对依赖进行统一管理,如版本的控制,Scope范围管理等,此时使用dependencyManagementjar包进行统一管理

    dependencyManagement:表示父项目只进行依赖管理,依赖(groupId,artifactId)默认不会被子项目继承;但是version,scope可以被继承,子工程只需写groupId,artifactId即可,version,scope会从父工程继承过来.但是如果子工程中也     配置version,scope的话,会默认覆盖掉父工程的version,scope. 

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
                <scope>test</scope>
            </dependency>

            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>${commons-fileupload.version}</version>
                <scope>compile</scope>
            </dependency>
</dependencies>

    </dependencyManagement>

 2. 在子项目中引用父项目中的

 <!-- 子项目引用父项目的依赖,默认继承了父项目的version,scope,
         此时只需要再配置groupId,artifactId引用父项目的依赖就可以啦-->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
        </dependency>
</dependencies>

 2.2 聚合

将多个子项目添加到一个父项目中,然后通过能父项目进行操作,从而实现对所有聚合的子项目的操作

 <!--
      聚合:将多个子项目添加到一个父项目中,然后通过对父项目进行操作,从而实现对所有聚合的子项目的操作
      聚合子项目:指定子项目的根目录
      ../代表上一级目录
  -->
    <modules>
        <module>../child03</module>
        <module>../child01</module>
        <module>../child02</module>
    </modules>

 2.3 依赖

项目C——>项目B——>项目A
概念:如果项目C依赖于项目B,项目B依赖项目A,则项目C也依赖于项目A,这叫依赖的传递
配置依赖关系:child03——>child02——>child01

2.3.1 控制依赖的传递

  并不是所有的依赖都会被传递:

  • scope为compile的依赖会被传递
  • scope为test的依赖不会被传递
  • 配置optional为true的依赖不会被传递
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<optional>true</optional>
</dependency

 2.3.2 不会出现jar包的冲突

使用maven不会jar包冲突,通过两个原则来保证:
就近原则
child03——>child02——>child01
优先定义原则
child03——>child02——>child01
      ——>child04

2.3.3 不要传递的依赖

方式1:在依赖的项目中配置不允许传递

<optional>true</optional>

 方式2:在当前项目中配置不接收传递的特定依赖

<!­­ 依赖于child01­­>
<dependency>
<groupId>com.itany.study</groupId>
<artifactId>child01</artifactId>
<version>1.0­SNAPSHOT</version>
<!­­ 不接收特定的依赖 ­­>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>

 三.使用Nexus搭建Maven私服

3.1 为什么要搭建私服

  公司不提供外网给开发人员,无法使用maven访问远程仓库,此时可以在局域网内找一台能访问外网的电脑搭建maven私服

3.2 Nexus工具

  用来搭建Maven私服的工具

       下载地址:https://pan.baidu.com/s/1mCfnGci42uSPb8W2VmKfHw

       验证码:s8ba

      下载完毕之后,在D:\soft\maven\nexus\nexus-2.12.0-01\bin\jsw\windows-x86-64(我自己的安装地址)安装启动私服即可。

     常用的三个命令:

      install-nexus.bat:运行install-nexus.bat安装maven私服

     start-nexus.bat:运行私服

     stop-nexus.bat:停止私服

3.3 操作步骤

  步骤:
  1. 解压缩并安装为系统服务

  2.访问

    http://localhost:8081/nexus

3.4 登陆并配置私服

  登陆账户和密码:admin/admin123
  1. 添加阿里云代理(镜像)仓库到私服中
  2. 添加本地jar到私服中

  好了,maven的相关东西就总结到这里,如果后续有需要继续完善的,再做补充。

猜你喜欢

转载自www.cnblogs.com/wangfangz/p/9801851.html