Maven基础及概念

前言

今天就来聊聊Maven的基础和一些比较概念性的东西,还有一些常用的Maven命令啥的,主要是某人脑子记不住,记在博客中让她自己看吧,省的费心给她找。

后续的文章会聊到Maven的一些比较高级用法,像自定义插件,私服啥的,欢迎各位大佬来讨论哦!

概念

Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一个标准的目录结构和一个默认的构建生命周期。

在有多个开发团队环境的情况下,Maven 能够在很短的时间内使得每项工作都按照标准进行。因为大部分的工程配置操作都非常简单并且可复用,在创建报告、检查、构建和测试自动配置时,Maven 可以让开发者的工作变得更简单。

Maven 的主要目的是为开发者提供

  1. 一个可复用、可维护、更易理解的工程综合模型
  2. 与这个模型交互的插件或者工具

Maven 工程结构和内容被定义在一个 xml 文件中(即谈到的pom.xml)

安装配置

Maven 是一个基于 Java 的工具,所以要做的第一件事情就是安装 JDK。

官网下载后解压即可,一般都是在开发工具里面配置Maven的位置就可以了,如果喜欢敲命令的话,那就添加一下环境变量。

然后配置一下本地仓库地址和镜像仓库,提供一下示例:

maven下载地址:Maven – Download Apache Maven 

JDK原生打包

在Maven工具出现之前,基本上用的都是Ant(打包构建项目工具)打包,由于现在Maven越来越流行,使用Ant打包的项目就越来越少了,这些工具基本上都是通过对JDK原生打包的方式进行了一层封装,编译打包底层还是基于JDK带有的工具实现的。

现有一个demo测试项目,结构路径如下:

 我们进入到这个src的目录里面,使用命令进行编译:

 编译好后就可以进行打包成jar包文件了,jar文件又分为两种,一种是直接被引用的jar包,另外一种是可以直接执行的可执行jar包,打包命令如下:

 这时打的包仅是一个普通的jar包,如果要打成可执行包的话,那么就得引用一个MANIFEST.MF文件了,JDK也是根据这个文件加载相关的类信息的,新建一个manifest.txt文件,内容如下(每个冒号后面都需要有空格,每行都需换行)

Manifest-Version: 1.0
Created-By: 1.8.0_101 (Oracle Corporation)
Main-Class: com.compile.App

执行一下命令

这样打出来的jar包就是可执行包啦。使用以下命令启动jar包

 java -jar compile.jar

使用Maven打包

我们需要创建一个Maven Project项目,我们这里使用quickstart原型(快速创建)

创建好后再pom.xml里面的build标签里面添加Maven打包插件,如果不需要可执行jar包的话,把configuration标签去掉就好了

 POM结构

先放在这里,起码有个概念,会在后面的博文中讲到

 Maven项目结构

项目结构是一个约定好了的目录,如果有些改动的话,可能项目都不能正常运行或打包(博主碰到过一次,贼难受)

约定的目录(不可改):

src/main/java –存放项目的.java文件

src/main/resources –存放项目资源文件。比方Spring,Mybatis配置文件

src/test/java –存放全部测试.java文件,比方JUnit測试类

src/test/resources ---测试资源文件

target ---项目输出位置,编译完毕后的东西放到这里面

pom.xml

Maven生命周期

在 Maven的的生命周期里面,理想的标准构建流程为:清理->编译 -> 测试 -> 报告 -> 打包 -> 部署。并且在一个pom.xml里面全部搞定

而Maven只是一个抽象规范流程,每个周期里面的流程是有具体的插件来执行的

 而每个生命周期的预设如下:

阶段处理描述
验证 validate验证项目验证项目是否正确且所有必须信息是可用的
编译 compile执行编译源代码编译在此阶段完成
测试 Test测试使用适当的单元测试框架(例如JUnit)运行测试。
包装 package打包创建JAR/WAR包如在 pom.xml 中定义提及的包
检查 verify检查对集成测试的结果进行检查,以保证质量达标
安装 install安装安装打包的项目到本地仓库,以供其他项目使用
部署 deploy部署拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程

运行任何一个阶段,都会从其所在生命周期的第一个阶段开始,顺序执行到指定的阶段,如:

mvn package  --- 本义:执行default周期的package阶段,maven会自动从process-resources阶段开始运行到package阶段结束

Maven插件

插件plugin是绑定到生命周期,承担实际功能的组件。mvn运行时,自动关联插件来运行

下图是maven默认的各阶段对应的插件列表:

生命周期

生命周期阶段

插件目标

执行任务

clean

pre-clean

clean

maven-clean-plugin:clean

删除项目的输出目录。

post-clean

site

pre-site

site

maven-site-plugin:site

post-site

site-deploy

maven-site-plugin:deploy

default

process-resources

maven-resources-plugin:resources

复制主资源文件至主输出目录

compile

maven-compiler-plugin:compile

编译主代码至主输出目录

process-test-resources

maven-resources-plugin:testResources

复制测试资源文件至测试输出目

test-compile

maven-compiler-plugin:testCompile

编译测试代码至测试输出目录

test

maven-surefire-plugin:test

执行测试用例

package

maven-jar-plugin:jarejb:ejb jar:jar rar:rar war:war

创建项目jar

install

maven-install-plugin:install

将项目输出构件安装到本地仓库

deploy

maven-deploy-plugin:deploy

将项目输出构件部署到远程仓库

Maven常用命令

mvn clean  执行清理阶段生命周期

mvn compile 执行编译阶段生命周期

mvn package 执行打包阶段生命周期

mvn install 安装jar到本地库

mvn dependency:tree 将当前项目pom.xml中引入的依赖打印出来

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

织梦缩略图自动补齐绝对路径_织梦生成文章内容缩略图时自动加上域名绝对路径...

今天又接了个织梦CMS的有偿服务,客户想要后台添加文章内容的时候,缩略图自动变成带上绝对路径的格式.比如我们默认的缩略图是这样的 /uploads/allimg/150814/123P2NB-0-lp.png 他想要的效果是这样的 http://www.youwujun.com.cn/uploads/allimg/150814/123P2NB-0-lp.png大家懂我…

BUAA 436 孟竹的复习计划(二维树状数组)

题目链接:http://acm.buaa.edu.cn/problem/436/ 题意:一个数列两种操作:(1)将某个位置的数字改成另一个数字;(2)交换两个位置的数字。每次操作之后输出逆序数的个数。 思路&#xff…

Maven之pom.xml常用标签解析及镜像配置

前言 Maven仅仅是个打包工具而已,个人觉得没有太大必要花费在打包工具上,这里就列举一下个人觉得会常用标签的使用就好了,原理啥的基本就不太会去深度了解了,如果以后遇到需了解Maven工作原理的工作的话,到时候一定分…

idea 导入svn代码_idea导入svn项目

起初和导入git项目一样,file - new - project from version control - ,这后面选 subversion。在打开的 checkout from subversion对话框中,输入svn地址,比如 svn://11.22.33.44/demo。添加一个后,展开新加项&#xff…

由mysql8降级到mysql5

最近在研究liferay的使用。liferay可以连接mysql数据库。电脑中装的mysql的最新版本是mysql8。于是开始按照liferay的要求进行连接。但是多番尝试后,均报错:java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be cast …

tf计算矩阵维度_tensorflow中关于 多维tensor的运算(tf.multiply, tf.matmul, tf.tensordot)...

multiply 等同与* ,用于计算矩阵之间的element-wise 乘法,要求矩阵的形状必须一致(或者是其中一个维度为1),否则会报错:import tensorflow as tfa tf.constant([1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12], shape[2, 3, 2])b tf.con…

Maven高级之插件开发

前言 终于来到了Maven的插件开发,其实Maven的插件并没有想象的那么难,刚开始讲Maven基础的时候就演示了一下JDK是如何打包的,Maven打包只是在JDK打包上封装了一层而已,Maven也支持自定义插件开发 创建 我们先使用quickstart原型…

HTTP1.1新增了五种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 、 CONNECT

200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 201 (已创建) 请求成功并且服务器创建了新的资源。 202 (已接受) 服务器已接受请求,但尚未处…

katalon进行app测试_Katalon API 测试 Demo

为何选择Katalon符合我们当下的情况,测试需要借助现有工具提高测试效率以及提高测试质量;为何不自己写代码?不是只有自己写的框架才是最好的,合适的才是最好的;katalon 支持ui、mobile、api 同时也支持脚本模式&#x…

Maven高级之archetype(原型/骨架)开发

前言 archetype这个的主要功能就是将写好的项目模块打包成一个原型,然后提供给其他人使用,这样别人就可以快速使用这个项目模板了。 这个东西虽然很多人都基本用不上,但原型这个东西用的好还是很方便的,能够在开发新项目上省去大…

深度学习在搜索业务中的探索与实践

本文根据美团高级技术专家翟艺涛在2018 QCon全球软件开发大会上的演讲内容整理而成,内容有修改。引言 2018年12月31日,美团酒店单日入住间夜突破200万,再次创下行业的新纪录,而酒店搜索在其中起到了非常重要的作用。本文会首先介绍…

cesium面积计算_cesium-长度测量和面积测量

(更新)多谢网友的提醒,面积测量的小问题已经修改,经测试可正常使用网上找的大神的实现方法有点问题,实现有一些bug,作为cesium新手一个,弃之不忍,只好硬着头皮修改了,不过还好问题不大&#xff…

SpringBoot自动配置原理流程

前言 新公司太忙了,都没啥空更新博客,就随便记录一下以前的学习笔记吧。SpringBoot是基于Spring上的衍生框架,只要看懂了Spring的话,学这个就比较简单了;SpringBoot也是在当前微服务时代下流行的框架,并且…

算法:对象方式数组去重

var arr [3, 1, 1, 4 , 2 , 4 , 2 , 4 , 2, 1, 1, 3, 3, 3];var ary[];var obj{};for(var i0;i<arr.length;i){var curarr[i];if(!obj[cur]){obj[cur]cur;ary.push(cur);}}console.log(ary); 复制代码

python实现路由功能_python 实现重启路由器

有一些服务&#xff0c;需要动态IP&#xff0c;所以我们用重启路由器的方法实现。人工重启不可选&#xff0c;用定时脚本执行即可。贴代码&#xff0c;每种路由器&#xff0c;提示不一样。需要路由器有telnet功能才行。#!/usr/bin/env python# -*- coding: utf-8 -*-import tel…

SpringBoot自定义Starter(自动配置类)

前言 SpringBoot其实从诞生以来围绕的核心就是快速构建项目&#xff0c;快速构建的前提是有人帮你做好轮子&#xff0c;开发者只要拿来即用就好了&#xff0c;而造好轮子的人就是SpringBoot的开发者&#xff0c;引入自动配置的形式帮助开发者快速创建项目&#xff0c;而自动配…

Java并发编程之synchronized关键字解析

前言 公司加班太狠了&#xff0c;都没啥时间充电&#xff0c;这周终于结束了。这次整理了Java并发编程里面的synchronized关键字&#xff0c;又称为隐式锁&#xff0c;与JUC包中的Lock显示锁相对应&#xff1b;这个关键字从Java诞生开始就有&#xff0c;称之为重量级锁&#xf…

raidrive安装失败_记一次RaiDrive映射OneDrive遇到的问题

大概在1周以前&#xff0c;出于需要存放直播录像的原因&#xff0c;根据别人的视频教程去自己动手搞了个5T网盘的帐号。(体验一下&#xff0c;其实我还同时存一份在百度云&#xff0c;怕不稳定)用RaiDrive创建OneDrive的映射&#xff0c;在这步骤点确定后&#xff0c;会弹出微软…

通过代理模式 + 责任链模式实现对目标执行方法拦截和增强功能

前言 最近需要实现一个插件功能&#xff0c;但是如果做成两个接口的话&#xff08;即执行前和执行后&#xff09;&#xff0c;那么会降低插件的可玩性&#xff0c;所以需做成类似AOP的环绕通知形式&#xff0c;所以就使用到了责任链模式和代理模式进行实现。 介绍 代理模式(P…

Javascript基础之-原型(prototype)

首先呢&#xff0c;prototype是对象里的一个内置属性&#xff0c;并且呢&#xff0c;这个属性是对于其他对象的一个引用。所以呢&#xff0c;思考下面的例子&#xff1a; var obj {a: 2 } var myObj Object.create(obj); console.log(myObj.a); // 2 console.log(myObj obj)…