Maven(1)maven相关知识

一、Maven介绍

  1. apache组织提供一个顶级项目
  2. maven是一个由Java开发工具
  3. 作用:
    1. 管理项目构建生命周期
    2. 管理项目中的jar
    3. 管理项目基础信息(文档管理,测试报告)

二、项目构建生命周期

  1. 简单: 开发 、编译、打包、发布

打包:(1)简单的Java工程,将工程中所有的Java类打成jar包
(2)简单的WEB工程,将工程打成war包---->可以放在tomcat里面直接运行的。

  1. 专业流程:
    [清理clean]----->[编译compile]----->[测试test]----->[报告]----->[打包package]----->[发布]

三、项目中jar管理:

  1. jar管理难度:
    1. 定位较难
    2. jar包之间依赖很难
    3. jar之间冲突
    4. jar管理

四、MAVEN是如何管理jar

MAVEN是如何管理jar

  1. 通常在我们本地计算机就会有一个本地仓库,本地仓库里面用来存放jar包,当我们用jar包时,会去本地仓库寻找所需要的jar包。然而当我们在本地找不到需要的jar包时,maven会去局域网哪里的***仓库寻找所谓的jar包,如果有就会返回到本地项目中。
  2. 如果在仓库里面还没有找到想要的jar包的话,maven就会前往外网,到中央仓库寻找。

[本地仓库]---->[局域网仓库]---->[中央仓库]

五、maven项目信息管理

  1. api文档
  2. 测试报告

六、MAVEN安装与配置

1.安装:解压即可,复制到没有中文和空格的文件夹下。
下载Maven打开链接:https://maven.apache.org/download.cgi
2. 配置:
1. JAVA-HOME:jdk安装位置
2. MAVEN-HOME:MAVEN安装位置
3. path:%MAVEN-HOME%\bin

七、maven的本地仓库

随便发送maven命令:
mvn clean
mvn compile
mvn package
导致maven在当前计算机上生成一个本地仓库

默认位置:c:\【用户/users】\【(登陆用户名称/Administrator)】\m2\resporsitry

八、重新设置MAVEN本地仓库地址

MAVEN安装路径\conf\settings.xml中定位标签

打开文档,在第53行# <localRepository>/path/to/local/repo </localRepository>

重新设置本地仓库地址,将新的地址放在标签中间就行。

九、MAVEN工程结构

  1. MAVEN可以管理工程,必须按照【约定结构】来创建
  2. 结构
  • src文件夹:(java代码)

    1. main(主要开发)
      1. Java(创建Java文件)
      2. resources(配置文件,propeties)
    2. test(主要进行测试)
      1. java(创建测试类)
      2. resources(测试时使用配置文件)
  • target文件:(编译后class文件,在创建项目时,不需要创建。MAVEN命令在执行时自动创建target)

  • pom.xml:(核心配置文件;主要向MAVEN讨要jar)

    <!--project是pom.xml的根元素,包含了一些约束的信息,比如xlms,xsi-->
    <project>
          <!--指定了当前pom的版本-->
           <modelVersion>4.0.0</modelVersion>
          <!--maven2.0必须是这样写,现在是maven2唯一支持的版本-->
          <!-- 基础设置 -->
          <groupId>反写公司的网址+项目名称</groupId>
          <artifactId>项目名称+模块名</artifactId>
          <version>当前项目版本号</version>
           <!-- 默认是jar,还可以打包成war/zip/pom-->
          <packaging>...</packaging>
          <!-- 项目描述名,一般是写项目文档的时候才使用 -->
          <name>...</name>
          <!-- 项目的地址-->
          <url>...</url>
          <!-- 项目的描述 -->
          <description>...</description>
          <!-- 开发人员的列表 -->
          <developers>...</developers>
          <!-- 许可证的信息 -->
          <licenses>...</licenses>
          <!-- 组织信息 -->
          <organization>...</organization>
    
          <!-- 依赖列表,下面可以包含多个依赖项dependency-->
          <dependencies>
             <dependency>
                 <!-- 指定坐标确定依赖项的位置 -->
                 <groupId></groupId>
                 <artifactId></artifactId>
                 <version></version>
                 <type></type>
                 <!-- 依赖包的依赖范围-->
                 <scope></scope>
                 <!-- 这个标签只有true和false两个值,是用来设置依赖是否可选 -->
                 <optional></optional>
                 <!-- 排除依赖传递列表 -->
                 <exclusions> 
                   <exclusion>
                   </exclusion>  
                 </exclusions>
              </dependency>
           </dependencies>
    
           <!-- 依赖管理,里面包含多个依赖,但是它并不会被运行,即不会被引用到实际的依赖中-->
           <!--这个标签主要是用来定义在父模块中,供子模块继承用 -->
           <dependencyManagement>                              
               <dependencies>
                  <dependency>
                  </dependency>
               </dependencies>
          </dependencyManagement>
    
           <!-- 常用于给构件的行为提供相应的支持 -->
            <build>
              <!-- 插件列表 -->
              <plugins>
                  <plugin>
                     <groupId></groupId>
                     <artifactId></artifactId>
                     <version></version>
                   </plugin>
               </plugins>
            </build>
    
          <!-- 用于在子模块中对父模块的pom的继承 -->
          <parent>...</parent>
           <!-- 用来聚合多个模块,让多个模块进行编译,不用一个一个来 -->
          <modules>
            <module>
            </module>
          </modules>
    </project>

一个最简单的pom.xml的定义必须包含modelVersion、groupId、artifactId和version这四个元素,当然这其中的元素也是可以从它的父项目中继承的。在maven中,使用groupId、artifactId和version组成groupId:artifactId:version的形式来唯一确定一个项目:

<?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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!-- 
        含义:组织标识,定义了项目属于哪个组,风向标,坐标,或者说若把本项目打包
        用途:此名称则是本地仓库中的路径,列如:otowa.user.dao,在M2_REPO目录下,将是: otowa/user/dao目录
        命名规范:项目名称,模块,子模块
    -->
    <groupId>otowa.user.dao</groupId>
    <!-- 
        含义:项目名称也可以说你所模块名称,定义当面Maven项目在组中唯一的ID
        用途:例如:user-dao,在M2_REPO目录下,将是:otowa/user/dao/user-dao目录
        命名规范:唯一就好
    -->
    <artifactId>user-dao</artifactId>
    <!-- 
        含义:项目当前的版本号
        用途:例如:0.0.1-SNAPSHOT,在M2_REPO目录下,将是:otowa/user/dao/user-dao/0.0.1-SNAPSHOT目录
    -->
    <version>0.0.1-SNAPSHOT</version>
    <!-- 打包的格式,可以为:pom , jar , maven-plugin , ejb , war , ear , rar , par -->
    <packaging>war</packaging>
    <!-- 元素声明了一个对用户更为友好的项目名称 -->
    <name>maven</name>
</project>

在打完jar包后,若想直接将jar包存储在本地仓库里面,可以按一下步骤:
在命令框里面输入:

  1. mvn clean 2. mvn install

这样可以帮我们把程序编译,测试,打包然后安装到本地仓库。

十、MAVEN常见命令(项目构建周期)

  1. mvn clean:删除当前工程中target
  2. mvn compile:将当前工程中main文件下所有的Java编译为class,输送到当前工程中target
  3. mvn package:将工程中test文件下所有的Java测试类的方法调用执行进行测试并声明【测试报告】
    如果测试没有问题,将main文件下所有class文件打成(jar,war)输送到当前工程[target]
  4. mvn install:与package命令执行基本一致,将【jar,war】推送到maven的本地仓库中。

十一、MAVEN坐标(gav)

为了方便maven对jar的定位。在maven世界中,每一个jar都要由一个独立坐标,相当于ip,这个独立坐标由三部分组成。

<groupId>反写公司的网址+项目名称</groupId>
<artifactId>项目名称+模块名</artifactId>
<version>当前项目版本号</version>
全部评论

相关推荐

10-19 10:28
已编辑
西南石油大学 后端工程师
团孝子已上线feeling:面了很多家公司,能感受到目前只有小公司+外包喜欢问八股。大厂虽然也问八股,但是是从实习、项目中进行提问,并且大厂会问很深,面试官也会对你的回答进行思考➕追问,所以准备大厂面试前一定要备好相关资料。对于算法,我做的是codetop前100+力扣hot100+力扣高频150,面试中实感hot100就足够,基本上只要是hot100就秒答。对于项目和八股,我做的也是烂大街的星球项目,八股则是看小林和问ai,自己也写了很多技术博客和画了很多思维导图,并且自己也尝试用嘴巴说出来,不只停留于纸面。运气也很重要,必须要让面试官/HR看到简历才行,所以建议投递时间是下午两点。tl:第一岗位9.9&nbsp;投递9.10&nbsp;一面(一面评价:最近见过最强的大三,结束五分钟后约二面,都晚上九点了不下班吗)9.11&nbsp;二面(三道算法a出两道,反问评价:经验不够等横向,我实习生要啥经验)9.21挂(实习时间过短+其他原因,想要一年实习的,为什么不招个正职)第二岗位10.10投递10.11约面(主管打电话,说看到我之前投递记录了想要我挂qa职进去干后端,同意)10.14&nbsp;一面(无八股,主动说确实很强,意愿很强)10.16&nbsp;oc其余,友邦,东软,东华,惠择,用友oc已拒京东测开一面挂(投后端被测开捞)腾讯测试已拒(投后端被测开捞)ps:表扬惠择的主管面,没怎么问技术(可能是一面面试官沟通过了),全程一起讲大道理,解答了心中很多疑惑,也告诉我以面试官角度来看怎么选候选人,如果可以下次一定选惠择
HeaoDng:美团好像可以触发一面通
点赞 评论 收藏
分享
敢逐云霄志:你打招呼语怎么能这么长,hr都没看下去的欲望,简明扼要说重点,就读于某某学校某某专业,26届应届毕业生,学信网可查,先后在某某公司实习过(如有),然后做过什么项目,想找一份什么样的工作,可实习几个月以上,期待您的回复。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务