Maven仓库、指令、配置文件、插件详解及idea Maven项目操作

Maven


文章目录

      • Maven
        • 1.简介
        • 2.作用
        • 3.安装
        • 4.仓库配置setting.xml
        • 5.私服搭建(了解面试):nexus maven
        • 6.替换阿里云镜像
        • 7.idea集成Maven
        • 8.Maven常用命令(面试重点)
        • 9.Maven项目生命周期(面试重点)
        • 10.pom.xml详解(开发重要阶段)
          • 构建配置
          • 分发配置
          • 仓库配置
          • profile配置 报表配置
          • 环境配置
        • 11.常用插件
        • 12.Maven聚合(重点难点)
          • 父模块

1.简介

  • 解决包管理太麻烦、项目对包依赖的复杂关系的相关问题

  • Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件

2.作用

  • 项目构架:编译 -->测试–>打包–>运行

  • 依赖管理:jar包管理

  • 项目聚合:

    Maven\Gradle\Ant

3.安装

  1. 下载

  2. 配置环境变量(配置完毕后通过调用mvn -version进行测试)

    变量名
    MAVEN_HOME MAVEN项目根目录
    %MAVEN%\bin 添加到Path路径
  3. 文件夹目录

    bin:含有mvn运行脚本

    boot:含有plexus-classworlds类加载器框架

    lib:含有Maven运行时所需要的java类库

    conf:含有setting.xml配置文件

    Setting:默认repository仓库路径($(user)/.m2/repository),通过Maven下载的jar包都会保存在该路径

4.仓库配置setting.xml

  • 本地仓库:就是Maven在本机存储构件的地方。maven的本地仓库,在安装maven后并不会创建,它是在第一次执行 maven命令的时候才被创建。maven本地仓库的默认位置:在用户的目录下都只有一个.m2/repository/的仓库目录;可以修改。

    <localRepository> E:/repository/maven/reposlocalRepository>
    
  • 中央仓库:包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。开源的Java项目依赖的构件都可以在这里下载到。
    中央仓库的地址:http://repo1.maven.org/maven2/

  • 私服:是一种特殊的远程仓库,它是架设在局域网内的仓库。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LDOvZMdY-1571881204071)(G:\QF\Markdown\pic\Pharse3\Maven\仓库联系.png)]

5.私服搭建(了解面试):nexus maven

  1. 解压文件

  2. 配置环境变量

    变量名
    NEXUS_HOME 安装地址(解压地址)
    %NEXUS_HOME%\bin 加入Path路径
  3. 打开命令行执行命令

    C:\Users\Administrator>nexus install     安装服务
    C:\Users\Administrator>nexus start        启动服务
    C:\Users\Administrator>nexus uninstall  卸载服务
    
  4. 访问私服

    默认账户:admin 密码:admin123 访问路径:http://localhost:8081/nexus

    NEXUS内部使用Jetty作为服务器,界面通过ext.js开发

  5. 仓库分类 Maven仓库、指令、配置文件、插件详解及idea Maven项目操作_第1张图片

    • host仓库—>内部项目的发布仓库

    • Snapshots 发布内部snapshots版本的仓库

    • Releases 发布内部release版本的仓库

      Snapshot版本代表不稳定、尚处于开发中的版本,快照版本。

      Release版本则代表稳定的版本,发行版本。

      3rd party 发布第3方jar包的仓库,如oracle数据库驱动,open-189.jar

    • proxy仓库—>从远程中心仓库查找jar包的仓库

    • Apache Snapshots 查找Apache项目的快照版本的仓库

    • Central 中心仓库http://repo1.maven.org/maven2/

    • Codehaus Snapshots 查找Codehaus 的快照版本的仓库

    • group仓库—>把仓库按组划分,以组为单位进行管理

    • virtual仓库

  6. 私服的配置/Repository的配置

    在parent模块的pom.xml中加入私服的配置,让Maven从私服下载jar包,而不直接去远程仓库下载。

    默认情况下,Maven下载jar包将直接连接到外网http://repo1.maven.org/maven2/去下载;

    安装私服之后,让Maven下载jar包先从私服查找,如果没有,再从外网下载并保存在私服上

    在POM在加入下面的配置,其中url为NEXUS私服的Public Repository对外的地址

    以后,Maven下载构建(jar包或插件)都将从这里开始下载

    
    <profiles>  
         <profile>  
          <id>profile-nexusid>  
      
          <repositories>  
            <repository>  
              <id>nexusid>  
              <url>http://localhost:8081/nexus/content/groups/public/url>  
              <snapshots><enabled>trueenabled>snapshots>  
              <releases><enabled>trueenabled>releases>  
            repository>  
          repositories>  
          <pluginRepositories>  
            <pluginRepository>  
              <id>nexusid>  
              <url>http://localhost:8081/nexus/content/groups/public/url>  
              <snapshots><enabled>trueenabled>snapshots>  
              <releases><enabled>trueenabled>releases>  
            pluginRepository>  
          pluginRepositories>  
        profile>  
      profiles>  
    <activeProfiles>  
      <activeProfile>profile-nexusactiveProfile>  
    activeProfiles>
    
    

6.替换阿里云镜像


<mirrors>
    <mirror>
      <id>alimavenid>
      <name>aliyun mavenname>
      <url>http://maven.aliyun.com/nexus/content/groups/public/url>
      <mirrorOf>centralmirrorOf>        
    mirror>
mirrors>

7.idea集成Maven

Maven仓库、指令、配置文件、插件详解及idea Maven项目操作_第2张图片
Maven仓库、指令、配置文件、插件详解及idea Maven项目操作_第3张图片
Maven仓库、指令、配置文件、插件详解及idea Maven项目操作_第4张图片
Maven仓库、指令、配置文件、插件详解及idea Maven项目操作_第5张图片

项目目录 概述
${basedir} 存放pom.xml文件和所有子目录
${basedir}/src/main/java 存放java源代码
${basedir}/src/main/resources 存放项目资源文件,如properties配置文件
${basedir}/src/test/java 存放测试类源码,比如Junit代码
${basedir}/src/test/resources 存放测试需要的资源文件
${basedir}/target 存放编译后 的 classes 会放在 basedir/target/classes 下面, 和生成的JAR 文件

8.Maven常用命令(面试重点)

  • 编译源代码: mvn compile

  • 编译测试代码:mvn test-compile

  • 清除产生的项目:mvn clean

  • 运行测试:mvn test

  • 产生site:mvn site 站点:对整个项目的描述

    
    <build>
        <plugins>
        <plugin>
            <groupId>org.apache.maven.pluginsgroupId>
            <artifactId>maven-site-pluginartifactId>
            <version>3.7.1version>
            <dependencies>
                <dependency>
                    <groupId>org.apache.maven.doxiagroupId>
                    <artifactId>doxia-site-rendererartifactId>
                    <version>1.8version>
                dependency>
            dependencies>
        plugin>
        plugins>
    build>
    
  • 打包:mvn package

  • 在本地Repository中安装jar:mvn install

  • 上传项目到远程仓库:mvn deploy(更多是私服,需要用户名密码等认证)

9.Maven项目生命周期(面试重点)

三套生命周期:

  • Clean 清理项目对应命令: mvn clean

  • Default 最核心的生命周期 :

    • 验证:mvn validate

    • 编译:mvn compile

    • 测试:mvn test

    • 打包:mvn pagkage

    • 安装到仓库:mvn install

    • 发布到远程仓库/私库:mvn deploy

  • Site 生成站点:mvn site

    clean、default、site

    clean: 主要目的是清理项目

    pre-clean: 执行一些清理前需要完成的工作

    clean: 清理上一次构建生成的文件

    post-clean: 执行一些清理后需要完成的工作

    default:定义了真正构建时所需要执行的所有步骤,它是生命周期中最核心的部分

    validate

    initialize

    generate-sources

    process-sources: 处理项目主资源文件。一般来说,是对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中

    generate-resources

    process-resources

    compile: 编译项目的主源码。一般来说,是编译src/main/java目录下的Java文件至项目输出的主classpath目录中target

    process-classes

    generate-test-sources

    process-test-sources: 处理项目测试资源文件。一般来说,是对src/test/resources目录的内容进行变量替换等工作后,复制到项目输出的测试classpath目录中

    generate-test-resources

    process-test-resources

    test-compile: 编译项目的测试代码,一般来说,是编译src/test/java目录下的Java文件至项目输出的测试classpath目录中

    process-test-classes

    test: 使用单元测试框架运行测试,测试代码不会打包或部署

    prepare-package

    package: 接受编译好的代码,打包成可发布的格式,如JAR

    pre-integration-test

    integration-test

    post-integration-test

    verify

    install: 将包安装到Maven本地仓库,供本地其他Maven项目使用

    deploy: 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用

    site生命周期: 建立和发布项目站点,Maven能够基于POM所包含的信息,自动生成站点

    pre-site: 执行一些在生成项目站点之前需要完成的工作

    site: 生成项目站点文档

    post-site: 执行一些在生成项目站点之后需要完成的工作

    site-deploy: 将生成的项目站点发布到服务器上

10.pom.xml详解(开发重要阶段)

  • 基本配置

    pom.xml

    
    <modelVersion>4.0.0modelVersion>
    
    <groupId>cn.cdqfgroupId>
    
    <artifactId>maven_01artifactId>
    <version>1.0-SNAPSHOTversion>
    
    <packaging>warpackaging>
    
    <properties>
        <junit.version>4.12junit.version>
    properties>
    
    <dependencies>
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>${junit.version}version>
            
            <scope>testscope>
        dependency>
        <dependency>
            <groupId>io.springfoxgroupId>
            <artifactId>springfox-swagger-uiartifactId>
            <version>2.9.2version>
            
            <exclusions>
                <exclusion>
                    <groupId>org.slf4jgroupId>
                    <artifactId>slf4j-apiartifactId>
                exclusion>
            exclusions>
        dependency>
    dependencies>
    
    
    <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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
     
    	
    	<modelVersion>4.0.0modelVersion>
     
    	
    	<groupId>com.winner.tradegroupId>
     
    	
    	<artifactId>trade-coreartifactId>
     
    	
    	<version>1.0.0-SNAPSHOTversion>
     
    	
    	<packaging>jarpackaging>
     
    	
    	<classifier>...classifier>
     
    	
    	<dependencies>
     
    		
    		<dependency>
     
    			 
    			
    			<groupId>com.winner.tradegroupId>
    			<artifactId>trade-testartifactId>
    			<version>1.0.0-SNAPSHOTversion>
     
    			
    			
    			<scope>testscope>
     
    			
    			<optional>falseoptional>
     
    			
    			<exclusions>
    				<exclusion>
    					<groupId>org.slf4jgroupId>
    					<artifactId>slf4j-apiartifactId>
    				exclusion>
    			exclusions>
     
    		dependency>
     
    	dependencies>
     
    	
    	<properties>
    		<file.encoding>UTF-8file.encoding>
    		<java.source.version>1.5java.source.version>
    		<java.target.version>1.5java.target.version>
    	properties>
     
    	...	
    project>
    
    
  • Scope介绍(面试重点)

    scope定义了依赖的范围,默认是compile

    • compile:编译依赖范围,使用此依赖范围对于编译、测试、运行三种classpath都有效,即在编译、测试和运行时都要使用该依赖jar包
    • test:测试依赖范围,只对测试有效,表明只在测试的时候需要,在编译和运行时将无法使用该类依赖,如 junit
    • provided:已提供依赖范围。编译和测试有效,运行无效。如servlet-api,在项目运行时,tomcat等容器已经提供,无需Maven重复引入
    • runtime:运行时依赖范围。测试和运行有效,编译无效。如 jdbc 驱动实现,编译时只需接口,测试或运行时才需要具体的 jdbc 驱动实现;
    • system:系统依赖范围,使用system范围的依赖时必须通过systemPath元素显示地指定依赖文件的路径,不依赖Maven仓库解析,所以可能会造成建构的不可移植,谨慎使用
  • jar包冲突(面试重点)

    传递依赖:某个sdk(写得好的项目)首先这个项目会依赖某些jar,其它人 用到该sdk 需要导入sdk 的jar,也会传递导入sdk依赖jar

Maven仓库、指令、配置文件、插件详解及idea Maven项目操作_第6张图片

 引入条件:

Maven仓库、指令、配置文件、插件详解及idea Maven项目操作_第7张图片

 ```xml
 
     io.springfox
     springfox-swagger-ui
     2.9.2
     
     
         
             org.slf4j
             slf4j-api
         
     
 
 
 ```
  • 其他配置(了解)

    构建配置
    分发配置
    仓库配置
    profile配置 报表配置
    环境配置

11.常用插件

<build>
    <plugins>
        <plugin>
            <artifactId>maven-resources-pluginartifactId>
            <configuration>
                <encoding>UTF-8encoding>    
            configuration>
        plugin>
        <plugin>
            <groupId>org.apache.maven.pluginsgroupId>
            <artifactId>maven-compiler-pluginartifactId>
            <version>3.6.0version>
            <configuration>
                <source>1.8source> 
                <target>1.8target> 
                <compilerArgs> 
                    <arg>-parametersarg>
                    <arg>-Xlint:uncheckedarg>
                    <arg>-Xlint:deprecation arg>
                compilerArgs>
            configuration>
        plugin>
    plugins>
build>
插件名称 用途 来源
maven –clean -plugin 清理项目 Apache
maven –compile -plugin 编译项目 Apache
maven –deploy -plugin 部署项目 Apache
maven –install -plugin 安装项目 Apache
maven –resources -plugin 处理资源文件 Apache
maven –site -plugin 生成站点 Apache
maven –surefire -plugin 执行测试 Apache
maven –jar -plugin 构建JAR项目 Apache
maven –war -plugiin 构建war项目 Apache
maven –shade -plugin 构建包含遗憾的JAR包 Apache
maven –changelog -plugin 生产版本控制变更报告 Apache
maven –checkstyle -plugin 生成checkStyle报告 Apache
maven –javadoc –plugin 生成JavaDoc文档 Apache
maven –pmd –plugin 生成PMD报告 Apache
maven –project –info -reports –plugin 生成项目信息报告 Apache
maven –surefire –plugin 生成单元测试报告 Apache
maven -archetype –plugin 基于Archetype生成项目骨架 Apache
maven –assembly –plugin 构建自定义格式的分布包 Apache
maven –dependency –plugin 依赖分析及控制 Apache
maven –enforcer –plugin 定义规则并强制要求遵守 Apache
maven –pgp –plugin 为项目构建生成PGP签名 Apache
maven -invoke –plugin 自动运行Maven项目构建并验证 Apache
maven –release –plugin 自动项目版本发布 Apache
maven –scm –plugin 集成版本控制系统 Apache
maven –source –plugin 生成源码包 Apache
properties –maven –plugin 从properties文件读写Maven属性 Codehaus
sql –maven –plugin 运行SQL脚本 Codehaus
tomcat –maven –plugin 启动、停止、部署项目 Codehaus
versions –maven –plugin 自动化批量更新POM版本 Codehaus
cargo –maven –plugin 启动/停止/配置各类Web容器自动化部署Web项目 Cargo
jetty –maven –plugin 集成jetty容器,实现快速开发测试 Eclipse

12.Maven聚合(重点难点)

好处:模块重用

New—>project---->emptyproject
Maven仓库、指令、配置文件、插件详解及idea Maven项目操作_第8张图片
Maven仓库、指令、配置文件、插件详解及idea Maven项目操作_第9张图片

  • 父模块

Maven仓库、指令、配置文件、插件详解及idea Maven项目操作_第10张图片

  • Util模块
    Maven仓库、指令、配置文件、插件详解及idea Maven项目操作_第11张图片
  • Dao模块
    Maven仓库、指令、配置文件、插件详解及idea Maven项目操作_第12张图片
  • Controller模块
    Maven仓库、指令、配置文件、插件详解及idea Maven项目操作_第13张图片

你可能感兴趣的:(Frame)