文档章节

Maven项目的构建与管理

fysuccess
 fysuccess
发布于 2017/06/02 15:31
字数 1952
阅读 38
收藏 1
点赞 0
评论 0

1.Maven命令

Maven是Apache的一个跨平台的软件项目管理和构建工具,主要用于基于Java平台的项目构建、依赖管理。

Maven项目构建过程如上图所示,主要构建命令有几种:

mvn validate验证,验证项目是正确的并且所有的信息是可用的;

mvnclean 清理,清理项目缓存输出,一般是target文件夹被删除;

mvncompile 编译,将java源文件编译成.class文件;

mvn test测试,生成测试报告,运行test目录下的所有单元测试;

mvnpackage 打包,将项目打成jar、war或者pom;

mvninstall 安装,将当前项目安装到本地maven库,供其他项目依赖。

mvn deploy部署,在构建环境中完成,复制最终的包到远程库。

执行后面的命令会自动执行前面的命令,比如执行mvn package时会执行validate、clean、compile、test、package五个阶段。

2.Maven安装与配置

1)安装jdk1.7并配置环境变量

2)安装并配置maven环境变量

到maven官网下载maven最新版压缩包,解压到本地,添加系统环境变量

MAVEN_HOME: D:\develop\apache-maven-3.5.0

Path: % MAVEN _HOME%\bin

以上两步配置完毕后,在命令行执行mvn –v,可以maven版本信息和基本配置信息表示配置成功。

3)自定义maven仓库位置

找到maven安装目录conf,打开setting文件,修改localRepository节点配置为指定路径即可,比如:<localRepository>D:/maven/repository</localRepository>

4)maven安装目录结构

说明:

   bin中存放可执行的二进制文件

   conf存放settings.xml文件

   lib  运行maven所依赖的jar包

5)maven项目目录约定

src/main/java      存放项目的java源文件

src/main/resources  存放项目的资源文件,如springhibernate、mybatis的配置文件

src/test/java      存放所有的测试的java文件

src/test/resources   存放测试用的资源文件

target            项目输出位置

pom.xml  依赖管理文件

3.Maven核心概念

1)项目对象模型

说明:maven根据pom.xml文件,把它转化成项目对象模型(POM),这时要解析依赖关系,然后去相对应的maven库中查找所依赖的jar包。在clean,compile,test,package等生命周期阶段都有相应的Plug-in来做这些事情,而这些plug-in会产生一些中间产物。

2)maven仓库

Maven仓库用来存放Maven管理的所有Jar包。分为:本地仓库local和中央仓库central。

本地仓库:Maven本地库的Jar包仓库。

中央仓库:Maven官方提供的远程仓库。

当项目编译时,Maven首先从本地仓库中寻找项目所需的Jar包,若本地仓库没有,再到Maven的中央仓库下载所需Jar包到本地仓库。

3)maven坐标

坐标是Jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的Jar包。

groupId:定义当前maven项目属于哪个项目

artifactId:定义实际项目中的某一个模块

version:定义当前项目的当前版本

packaging:定义当前项目的打包方式

4)依赖管理

依赖分为传递依赖、排除依赖,还有依赖冲突解决

  • 传递依赖:如果项目引用了一个Jar包,而该Jar包又引用了其他Jar包,那么在默认情况下项目编译时,Maven会把直接引用和间接引用的Jar包都下载到本地。
  • 排除依赖:如果我们只想下载直接引用的Jar包,那么需要在pom.xml将需要排除的Jar包的坐标写在中。
  • 依赖冲突:若项目中多个Jar同时引用了相同的Jar时,会产生依赖冲突,但Maven采用了最短路径优先和声明优先两种避免冲突的策略,因此在Maven中是不存在依赖冲突的。

5)聚合与继承

  • 聚合:多个项目或者模块聚合到一起,建立一个package方式为pom的项目parent专门负责聚合工作,并使用modules-module指定子模块。
  • 继承:多个模块聚合时,子模块需要继承父模块以消除重复。

4.Maven项目结构的几种构建方式

1)手动建立maven目录

安装Maven项目目录约定手动创建各个文件夹即可,一般不会使用这种方式;

2)命令行maven命令自动创建maven项目

本地磁盘建立一个空目录C:/maven/hello,命令行进入到hello目录,执行下面的命令

mvn archetype:generate-DgroupId=com.cloud.hellomaven -DartifactId=hellomaven-service -Dversion=1.0.0-SNAPSHOT-Dpackage=com.cloud.service

执行成功的话会自动在hello中创建符合maven项目约定的目录结构。

说明:

archetype:generate:生成maven项目骨架

-DgroupId指定maven坐标的groupId

- DartifactId指定maven坐标的artifactId

- Dversion指定maven坐标的version

- Dpackage指定maven项目的src下的包名

自动创建的maven项目结构如下

3)Eclipse IDE创建maven项目

Eclipse提供了一个很好的插件m2eclipse无缝将Maven和Eclipse集成在一起,配置插件选择本地maven目录和配置文件setting.xml即可。

点击Eclipse菜单栏File->New->Ohter->Maven,选择Maven Project,一路默认Next,有一步需要填写GroupId、Artifact Id、Version、选择打包方式Package(jar、war、pom),选择编译环境即可

完成后目录结构如下

4)Idea IDE创建maven项目

Idea IDE是一款很不错的开发Maven项目的IDE,创建一个mavenweb项目的过程如下:

选择File-New-Project,选择Maven,勾选Create from archetype,选择maven-archetype-webapp,

点击Next,填写Group Id、Artifact Id、Version三项

点击Next,选择Maven home,选择setting file

点击Next,填写Project name,选择项目路径即可

Finish完成maven web项目创建

5.Pom文件说明

<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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <!-- 子模块对父模块的继承,继承父模块的所有依赖 -->
   <parent>
      <groupId></groupId>
      <artifactId></artifactId>
      <version></version>
   </parent>
   <!-- 指定多个模块一起进行编译 -->
   <modules>
      <module></module>
   </modules>

   <!--groupId 反写的公司网站+项目名称  -->
   <groupId>com.demo.ssm</groupId>
   <!--artifactId 项目名称+模块名称  -->
   <artifactId>demo-ssm</artifactId>
   <!--第一个0表示大版本号
          第二个0表示分支版本号
            第三个0表示小版本号 0.0.1
        snapshot快照 alpha内部测试 beta公测
        Release稳定版本 GA正式发布
    -->
   <version>0.0.1-SNAPSHOT</version>
   <!-- 默认是jar 可以是war jar pom -->
   <packaging>jar</packaging>
   <!--项目描述名称-->
   <name>demo-ssm</name>
   <!--项目地址-->
   <url>www.gseem.com</url>
   <!--项目描述-->
   <description>这是项目描述</description>
   <!--开发者列表-->
   <developers>feiyue</developers>
   <!--项目许可证-->
   <licenses></licenses>
   <!--项目组织信息-->
   <organization></organization>
   <!--项目属性-->
   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
   
   <!--项目依赖列表-->
   <dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.9</version>
         <type></type>
         <!-- 作用范围 -->
         <scope>test</scope>
         <!-- 设置依赖是否可选-->
         <optional></optional>
         <!-- 排除依赖传递列表 -->
         <exclusions>
            <exclusion></exclusion>
         </exclusions>
      </dependency>
      <dependency>
         <groupId>com.demo.maven</groupId>
         <artifactId>demo.maven</artifactId>
         <version>0.0.1-SNAPSHOT</version>
      </dependency>
   </dependencies>

   <!-- 依赖的管理 -->
   <dependencyManagement>
      <dependencies>
         <dependency></dependency>
      </dependencies>
   </dependencyManagement>

   <build>
      <!-- 插件列表 -->
      <plugins>
         <plugin>
            <groupId></groupId>
            <artifactId></artifactId>
            <version></version>
         </plugin>
      </plugins>
   </build>

</project>

欢迎大家关注博主订阅号“Java技术日志”,提供Java相关技术分享,从Java编程基础到Java高级技术,从JavaWeb技术基础Jsp、Servlet、JDBC到SSH、SSM开发框架,从REST风格接口设计到分布式项目实战。剖析主流开源技术框架,用亲身实践来谱写深度Java技术日志。

                         Java技术日志

© 著作权归作者所有

共有 人打赏支持
fysuccess
粉丝 2
博文 8
码字总数 13803
作品 0
架构师
maven基本概念

Maven(翻译为"专家","内行")是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。 1.1、项目构建   项目构建过程包括【清理项目】→【编译项目】→【测试...

camillelm ⋅ 2016/01/13 ⋅ 0

Maven基础知识

本人博客文章网址:https://www.peretang.com/basic-knowledge-of-maven/ Maven简介 Maven , 用于Java项目的构建 , 依赖管理 , 项目信息管理的项目管理工具. 是Apache组织旗下的开源项目. Mav...

PereTang ⋅ 2017/05/09 ⋅ 0

Apache Maven --- [简易入门]

Apache Maven 是一个软件项目管理和理解工具.它基于POM(project object model,项目对象模型),它可以从一个中央信息来管理项目的构建,报告和文档. Introduction: Maven,在犹太语中的意思是知识...

moonsnake777 ⋅ 2016/05/06 ⋅ 0

Maven构建自动化

构建自动化定义相关工程项目构建过程中,在当项目构建成功完成启动的情况下,来确保所依赖的项目是稳定的。 实例 考虑一个团队正在开发一个项目总线核心API上的其他两个项目的应用程序:网页...

park ⋅ 2017/11/28 ⋅ 0

使用jenkins实现tomcat自动化部署

1.下载jenkins的war包 wget "http://mirrors.jenkins.io/war-stable/latest/jenkins.war" 2.启动jenkins程序 nohup java -jar jenkins.war --httpPort=52201 &>> /root/jenkins.log & 3.访问......

信酱v ⋅ 2017/06/06 ⋅ 0

Maven 介绍(1)

Maven这个词的中文翻译是? 可以翻译为"知识的积累",也可以翻译为"专家"或"内行" Maven是啥?干什么的? 1、一个跨平台的项目管理工具 2、Apache组织的一个颇为成功的开源项目 3、Maven主要...

不正经啊不正经 ⋅ 2014/12/25 ⋅ 0

Maven实战读书笔记(1)

Maven这个词的中文翻译是? 可以翻译为"知识的积累",也可以翻译为"专家"或"内行" Maven是啥?干什么的? 1、一个跨平台的项目管理工具 2、Apache组织的一个颇为成功的开源项目 3、Maven主要...

祥林会跟你远走高飞 ⋅ 2014/12/10 ⋅ 2

【Maven3教程】安装与配置

Maven是一个采用纯Java编写的开 源项目管理工具。Maven采用了一种被称之为project object model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中,通过该文件,M...

Auhgnahz ⋅ 2016/05/19 ⋅ 0

Maven的核心笔记(1)配置Maven环境变量

Maven是啥? 1.Maven是一种项目构建管理工具,自动下载架包。 2.目前主流的项目构建工具:Maven、Ant、gradle。 3.两个主要概念:坐标——构件,仓库。 一、maven的环境 1.Maven是基于项目对...

山月风成 ⋅ 2017/10/12 ⋅ 0

Mave入门教程

Apache Maven是一个软件项目管理和综合工具。基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件。 本教程将介绍如何使用Maven在Java开发,或任何其他的编程...

马马来 ⋅ 2014/02/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JPA入门,配置文件的设置

<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http......

码农屌丝 ⋅ 17分钟前 ⋅ 0

Java基础——面向对象和构造器

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 静态成员介绍 为什么要有静态成员?静态成员用来...

凯哥学堂 ⋅ 19分钟前 ⋅ 0

vmware中Centos 7 linux的LVM磁盘扩容

系统是RHEL7(centos7差不多一样) 关闭系统,在vmware、设置、硬盘、扩展、输入数字大于当前系统内存、点击扩展。 开机再查看磁盘信息 fdisk -l 注意:可以看出sda磁盘增加了,但是根目录还...

gugudu ⋅ 30分钟前 ⋅ 0

JAVA线程sleep和wait方法区别

昨天面试,突然被问到sleep 和 wait的区别,一下子有点蒙,在这里记一下,以示警戒。 首先说sleep,sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过去后,cpu...

徐玉强 ⋅ 32分钟前 ⋅ 0

vuex学习--模块

随着项目复杂性增加,共享状态也越来越多。需要对转态操作进行分组,分组后在进行分组编写。学习一下module:状态管理器的模块组操作。 首先是声明: const moduleA={ state,mutations,g...

大美琴 ⋅ 34分钟前 ⋅ 0

Selenium 简单入门

安装 pip install selenium 驱动下载 https://chromedriver.storage.googleapis.com/index.html 下载最新的驱动,放入path中,可以放入Python的scripts目录下,也可以放入Chrome安装目录,并...

阿豪boy ⋅ 35分钟前 ⋅ 0

292. Nim Game - LeetCode

Question 292. Nim Game Solution 思路:试着列举一下,就能发现一个n只要不是4的倍数,就能赢。 n 是否能赢1 true2 true3 true4 false 不论删除几,对方都能一把赢5 t...

yysue ⋅ 今天 ⋅ 0

6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩

zip压缩工具 zip命令可以压缩目录和文件,-r 压缩目录。 zip使用方法 zip 1.txt.zip 1.txt //压缩文件 zip -r 123.zip 123/ //压缩目录 unzip 1.txt.zip //解压 unzip 123.zip -d /root/456...

Linux_老吴 ⋅ 今天 ⋅ 0

react-loadable使用跳坑

官方给react-loadable的定义是: A higher order component for loading components with dynamic imports. 动态路由示例 withLoadable.js import React from 'react'import Loadable fro......

pengqinmm ⋅ 今天 ⋅ 0

记录工作中遇到的坑

1、ios safari浏览器向下滚动会触发window resize事件

端木遗风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部