【maven的使用】2使用maven与pom文件
一、使用maven:
首先需要知道的是,在我们开发人员中有一句话叫做:约定优于配置。
比如,如果我们写代码有多种可选方案:
硬编码形式:obj.setPath("d:/xxxx") 、配置形式:conf.xml -> <path>d:/xxx</path>、约定形式:使用默认值d:/xxx
maven使用的就是约定形式,它约定为main目录中写执行项目,test目录中写测试项目,当执行命令下达则maven会在main中找,测试命令下达在test中找。
maven约定的目录结构:
项目
--src
--main #程序代码
--java #java代码
--resource #资源代码、配置diamante
--test #测试代码
--java
--resource
--pom.xml #项目对象模型,还记得dom文档对象模型吗?dom是将html元素看成一个节点/对象,而pom是将项目看成一个节点/对象。
mvn的命令需要联网才能使用。
编译命令:
mvn compile # 只编译main目录中的文件
执行测试命令:
mvn test 如果是failures则是测试失败,error则是代码报错
打包命令:
mvn package # 只有测试通过才能打包,打包的同时它其实会自动测试一次。
安装命令:
mvn install # 将开发的模块(打成包的),放入本地仓库,供其他模块(小伙伴)使用
清除编译:
mvn clean # 删除target目录,即删除编译文件的目录。
这些指令存在顺序问题,比如如果执行test测试命令,则肯定需要先经过编译,所以compile指令也会执行。大致的指令顺序如下:
compile - > test -> package -> install
也就是说,如果执行install指令,则前面的指令都会被执行。
这些都需要一些maven的基础环境jar包,首先会进入本地mvn库中看是否有基础jar包,如果没有则会自动去中央仓库下载,所以第一次执行会慢一点。
需要注意的是,clean删除的不是本地仓库中的jar包,更不是清除install命令存入本地仓库的包,而是清除compile命令编译而成的字节码文件。
如果想要删除本地仓库中的项目jar,则要通过该项目的gav进入本地mvn库手动删除。
二、pom文件:
maven使用pom.xml文件来描述项目模型。html中的dom树将标签看做一个节点,而pom树则是将项目看做一个节点。
该文件的常见元素如下:
①<properties>元素:
<properties>元素用于定义全局属性(通过键值对的方式),充当与定义变量的作用,在里面可以自定义标签并指定值,再通过类EL表达式的语法适用。通过使用该属性能做到易于代码的修改和维护,并提高可读性。比如我通过该属性定义本模块的版本号的键值对:
<properties>
<key1>value1</key1>
</properties>
<version>${value1}</version>
②<dependencies>元素:
<dependencies>元素定义依赖关系,它可以包含多个dependency子元素,每个dependency都定义一个依赖关系。依赖关系通过gav,即坐标来定位依赖于哪个模块。
<dependency>
<groupId>pers.tz.maven</groupId> # 大项目名
<artifactId>HolleWorld</artifactId> # 子模块名
<version>${value1}</version> # 版本号
<scope>test</scope> # 依赖的范围和有效性,默认是compile
</dependency>
我们已经知道,maven一个很关键的作用将一个项目拆成若干个模块,所以大项目名负责在本地mvn库中定位,而子模块名责负责在总项目中定位,版本号也是在很多迭代的版本中定位。
③<dependencyManagement>元素:
定义父工程的依赖关系,它的子元素是<dependencies>元素。
④<parent>元素:
定义该工程继承自哪个工程,通过gav坐标和该工程的pom文件到父工程pom文件的相对路径来定位它的父工程。举例:
<parent>
<groupId>pers.tz.maven</groupId>
<artifactId>hollemaven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../hollemaven/pom.xml</relativePath>
</parent>
如果父工程的gav坐标和该工程的gav坐标有相同的部分,则可将那部分删掉,这是maven的约定。
⑤<packaging>元素:
指定项目目标打包类型,java工程打成jar包,web工程打成war包,父工程打成pom包。
<packaging>jar</packaging>
⑥<profiles>元素:
我们以前使用eclipsebuild path修改jdk版本,或右键项目、属性、project factors修改jdk版本。
现在我们可以使用pom文件中的profiles元素来修改环境。代码如下:
<profiles>
<profile>
<!-- 名字随便起 -->
<id>jdk17</id>
<activation>
<!-- 激活 -->
<activeByDefault>true</activeByDefault>
<!-- 版本编号 -->
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
该元素更多的作用我暂时还不知道-.- 我暂时使用它来修改jdk环境
【maven的使用】2使用maven与pom文件的更多相关文章
- maven本地安装jar包同时生成pom文件
maven 本地安装jar包:mvn install:install-file -Dfile=本地路径/ojdbc12.jar -DgroupId=com.oracle -DartifactId=oj ...
- Maven Projects报错但对应的pom文件不报错解决方案
情景:dependencies中总有红波浪线报错,但是核对包名和路径,以及pom文件没有任何问题 项目可以正常运行,这种时候有强迫症的就不行了.... 解决方案是,根据波浪线提示的jar包,到pom文 ...
- pringboot pom文件引入本地jar包和对其打jar包
maven引入本地jar包需要在pom文件中天剑如下配置: <dependency> <groupId>com.baidu</groupId> <artifa ...
- Maven pom文件常用配置,转载
什么是POM Project Object Model,项目对象模型.通过xml格式保存的pom.xml文件.作用类似ant的build.xml文件,功能更强大.该文件用于管理:源代码.配置文件.开发 ...
- 【maven】maven创建web项目-pom文件提示web.xml is missing and <failOnMissingWebXml> is set to true
使用maven创建web项目,选择war类型后,pom文件红叉 提示web.xml is missing and <failOnMissingWebXml> is set to true ...
- scala maven pom文件
老司机的spark maven pom文件 pom文件一: 4.0.0 <groupId>com.glsx</groupId> <artifactId>spark- ...
- MyEclipse导入Maven项目pom文件第一行报错,运行Tomcat报Log4j错误--解决方法
问题描述: 前一段时间电脑第一次导入Maven项目,又是pom文件错,改好后又是运行Tomcat报Log4j错误,一直倒腾了近一个月程序才成功跑起来,太不容易. 也上网查了很长时间,没一个方法能解决我 ...
- Maven项目中pom文件分析
pom英文全称: project object model 1.概述 pom.xml文件描述了maven项目的基本信息,比如groupId,artifactId,version等.也可以对maven项 ...
- 关于使用命令添加jar进自己的pom文件中-maven项目添加jar包
现在几乎开发项目都是使用的maven项目,但是有的时候可以使用比较偏门或者新的jar可能在网上搜不到在pom文件里的配置应该如何写,因此写下这篇博客. 比如我现在想加入的AAA.jar这个包 打开cm ...
- maven 在pom文件下配置默认的jdk版本
在pom.xml中加入这段代码就可以了 <!-- 设置默认的jdk --> <profiles> <profile> <id>jdk1.7</id ...
随机推荐
- HDU-3038How Many Answers Are Wrong权值并查集
How Many Answers Are Wrong 题意:输入一连串的区间和,问和前面的矛盾个数: 思路:我在做专题,知道是并查集,可是还是不知道怎么做,学了一下权值并查集和大佬的优秀思路,感觉回了 ...
- bzoj 1588: [HNOI2002]营业额统计(splay入门)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 题解:这题如果用普通的bst的话是可以过时间差不多4s左右如果用splay的话是14 ...
- hdu 2767 Proving Equivalences(tarjan缩点)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2767 题意:问最少加多少边可以让所有点都相互连通. 题解:如果强连通分量就1个直接输出0,否者输出入度 ...
- CF1007B Pave the Parallelepiped 容斥原理
Pave the Parallelepiped time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- 2017 计蒜之道 初赛 第五场 UCloud 的安全秘钥(中等)
每个 UCloud 用户会构造一个由数字序列组成的秘钥,用于对服务器进行各种操作.作为一家安全可信的云计算平台,秘钥的安全性至关重要.因此,UCloud 每年会对用户的秘钥进行安全性评估,具体的评估方 ...
- win10 无法安装/启用 .net framework 3.5
有些程序依赖.net framework 3.5 win10可以在控制面板->程序和功能->启用或关闭windows功能 启用 但有时会报错 比如 0x800f0950 官方论坛的解决办法 ...
- 041 模块5-jieba库的使用
目录 一.jieba库基本介绍 1.1 jieba库概述 1.2 jieba库的安装 1.3 jieba分词的原理 二.jieba库使用说明 2.1 jieba分词的三种模式 2.2 jieba库常用 ...
- a417: 螺旋矩陣
题目: 每行有一正整数T,代表有几组测试数据 接下来有T行,每行有N.M两正整数 N为矩阵长宽,就是会有N*N矩阵 M为方向,M=1为顺时钟,M=2为逆时钟 N范围为1~100之间 思路: 所以,代码 ...
- apache ignite系列(九):使用ddl和dml脚本初始化ignite并使用mybatis查询缓存
博客又断了一段时间,本篇将记录一下基于ignite对jdbc支持的特性在实际使用过程中的使用. 使用ddl和dml脚本初始化ignite 由于spring-boot中支持通过spring.dataso ...
- 【Unity与Android】01-Unity与Android交互通信的简易实现
前言 使用Unity也有不短的时间了,安卓包也打过不少,但是对Unity与Android的交互却知之甚少. 因工作需求,需要在Android平台接一些sdk(扩展功能).我就借此机会就了解了下Unit ...