初学maven,简单总结一下学习心得,若有不对的地方,欢迎各位大神给我指正~
总结分为6个部分
- maven概述
- maven安装
- maven项目结构和创建方法
- maven配置文件settings.xml
- 项目对象文件pom.xml解析
- eclipse插件安装
一、maven概述
要用java实现一个后台系统,可能需要涉及很多模块。
web应用服务器、文件服务器、db 等等。 我们要开发这些模块,需要先把他们各自需要依赖的jar包或者项目下载打包好,然后配置到项目的classpath中。
这些应用在运行单元测试pr编译or部署的时候,需要依赖本地的一些配置,比如jdk、web容器等,这样我们将项目分享出去的时候,别人要使用就有一定的配置门槛。
maven可以帮我们完成上述所有的工作,不用我们再手工去完成。、
maven将项目看做一个对象。
maven建立了一个仓库体系,来管理这些项目对象。
maven的仓库分为本地仓库和远程仓库(maven提供的*仓库)。
我们可以通过maven的命令把自己的项目a放到本地仓库中,如果其他项目b需要依赖项目a,则可以直接在本地仓库中找到。
如果我们的项目依赖一些别人的项目,比如jdbc、mybatis,maven会先根据我们的项目属性在本地仓库中去找,若找不到就去*仓库中去找。
如下图,箭头表示依赖关系。
maven项目对象的部分基础属性:
① 项目坐标
项目坐标用来定位一个项目在仓库中的位置。当项目b依赖项目a或者jdbc时,maven会根据项目坐标属性去从仓库体系中寻找项目,并自动配置到项目依赖中。
② 打包方式。
这个属性决定我们执行maven的package方法后,项目会被打包成什么文件。
③ 项目依赖列表。
这个属性的值是一个数组,里边有一些其他项目的坐标。
④ 构建插件列表。
这个属性是一个数组,定义项目需要的一些插件,比如源码打包工具、web容器
还有一些属性在后边介绍。
maven项目对象的部分方法:
①mvn compile 编译项目
②mvn package 打包项目
③mvn clean 清除之前编译和打包产生的文件
④mvn install 将项目安装到本地仓库
⑤mvn test 运行测试代码
二、maven的安装
① 访问http://maven.apache.org/download.html 下载最新版本
② 解压到maven工作目录,比如d盘根目录
③ 配置maven环境变量
MAVEN_HOME : D:\apache-maven-3.0.2
MAVEN : %MAVEN_HOME%\bin
在path 前面 加上 %MAVEN%;
④ 打开cmd敲 mvn -version, 回车。
如看到下面信息表示安装成功:
三、maven项目结构和项目创建方法
项目结构:
一级目录src为源码目录
二级目录main/java为项目主要代码目录
三级目录就是项目的source目录了
二级目录test/java为项目测试代码目录
三级目录 测试代码source目录
一级目录 编译、打包产生的文件的存放目录
pom.xml文件——项目对象描述文件,前边讲的项目对象的属性和方法配置就在这个文件里边
maven项目创建方法
① 打开cmd,切换到工作目录,运行
首次运行这个命令maven会下载一大堆依赖的文件,这个不用管。
② 填写quickstart参数
按回车,这样就成功的创建了一个maven项目。
我们填写的几个参数:
groupId是帮助项目对象在仓库中定位的
artifactId决定了生成的项目文件夹目录的名称
version是项目版本号
package 是项目source文件下最顶层的包名
③ 项目创建成功
④ 也可以把命令一次敲完
四、maven配置文件settings.xml
在使用maven的时候和仓库相关的一些配置用到了这个文件,所以在这里想讲一讲这个文件。位置:maven\conf\settings.xml。
① 修改本地仓库位置
maven默认本地仓库的位置是 用户\.m2 目录 。这个目录在C盘下,和我们的工作区是分开的,不方便管理。另外,如果系统出现啥问题,C盘格式化了,我们的文件就找不回来了。
<localRepository>D:/java/maven_repo</localRepository>
修改这个属性,即可修改本地仓库的位置。
修改了settings.xml后最好在本地仓库里边复制一份,避免maven重装后配置文件丢失
② 配置maven*仓库位置
由于祖国很墙,有时候访问*仓库网速会特别慢或者干脆不可用,所有我们要配置一个maven*仓库在国内的镜像服务器。
我使用的是oschina提供的镜像服务器,项目比较全速度也挺快。
<mirrors>
<mirror>
<id>nexus-osc</id>
<mirrorOf>central</mirrorOf>
<name>Nexus osc</name>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
</mirrors>
五、maven项目对象配置文件 pom.xml 解析
pom.xml是maven项目比较核心的一个文件,所以这部分的内容可以算是重头了。我还是按照描述一个对象的方式来描述这个文件吧。
① pom.xml 对象
<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">
<!-- 指定了当前POM的版本 -->
<modelVersion>4.0.0</modelVersion>
</project>
这个是pom.xml的壳子,我姑且把它叫做pom对象吧
② 坐标属性
如果我们认为maven仓库是一个空间,那么坐标属性就是项目在这个空间内的 x、y、z 坐标(刚好决定坐标的标签有三个,这么比喻很合适啊:) )。
<groupId>com.sogou.hi</groupId><!-- 反写的公司网址+项目名 -->
<artifactId>hi</artifactId><!-- 一般是项目名+模块名 如 mcloud.db -->
<version>0.0.1-SNAPSHOT</version><!-- 大版本号.分支版本号.小版本号 snapshot 快照 alpha内测 beta公测 release稳定版 GA正式发布版本 -->
任何时候要找到一个项目,只需要有这三个属性就可以了
③ 项目依赖列表属性
概述中说过,这个属性是一个数组,那么在xml文件中的表现形式就是下面这样的:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
</dependency>
<dependency>
<groupId>com.sogou.ml</groupId>
<artifactId>ml-b</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
这个依赖列表属性表明,该项目依赖了两个项目 junit和ml-b 。项目依赖还有一些其他的属性,真正用的时候是下面这样的:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope><!-- scope 属性决定该依赖项目在什么阶段,test表示该项目只在测试代码中依赖 具体见 http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope -->
</dependency>
<dependency>
<groupId>com.sogou.ml</groupId>
<artifactId>ml-b</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions> <!-- 排除传递关系的依赖。 例如 ml-c 依赖 ml-b,ml-b依赖 ml-a ,那么我们会发现maven让ml-c同时依赖了a和b,通过这个属性可以排除c对a的依赖 -->
<exclusion>
<groupId>com.sogou.ml</groupId>
<artifactId>ml-a</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
④ 构建过程中使用插件的属性
这个配置会让我们的项目在运行 mvn package打包的同时将源码也打包,原本target目录下只会出现 xxx.jar ,现在还会出现一个 xxx-source.jar
<!-- 为项目构建行为提供相应支持 -->
<build>
<!-- 插件列表 -->
<plugins>
<!-- 打包源码插件 -->
<plugin>
<!-- 插件项目坐标 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<!-- 在什么阶段执行 -->
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
下面这个配置可以让项目打包完成后开始运行web容器,若是web项目就可以在浏览器中访问站点了。
<plugins>
<plugin>
<!-- <groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.15.v20140411</version>-->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<!-- 打包成功后即开始运行web容器 -->
<execution>
<phase>package</phase>
<goals>
<goal>
run
</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
⑤ 项目聚合属性
假如我们有好几个项目,需要一起编译打包,挨个打包很麻烦,这个时候我们就可以用聚合属性。
<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> <groupId>com.sogou.ml</groupId>
<artifactId>ml-all</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging> <name>ml-all</name>
<url>http://maven.apache.org</url>
<modules>
<module>
../ml-a
</module>
<module>
../ml-b
</module>
<module>
../ml-c
</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
新建一个pom文件,将packaging打包方式修改为pom。
添加modules属性,这个属性也是一个数组,里边有一些项目文件夹的路径,编译打包这个pom项目的时候,会将modules里边的项目都编译打包。
⑥ 父子项目属性
新建一个新的maven项目,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> <groupId>com.sogou.ml</groupId>
<artifactId>ml-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging> <name>ml-parent</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>3.8.1</junit.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement> </project>
打包方式同样的修改为pom。添加<dependencyManagement>节点,这个节点下是项目依赖属性。
在此节点下的依赖项目并不会在本项目中生效,但是可以在子项目的依赖中指定依赖,子项目配置如下:
<parent>
<groupId>com.sogou.ml</groupId>
<artifactId>ml-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
这样就可以让子项目依赖在父项目中配置的项目了
六、为eclipse安装maven插件
若我们使用的eclipse中米有maven插件,可以自己下载安装一个。
http://download.csdn.net/detail/cnclenovo/5181671
下载后解压到 eclipse\dropins 目录下即可。
打开Windows-preference 看到maven说明安装成功。
现在我们创建maven项目、编译打包等操作,都可以用eclipse插件来完成了。
转发请注明出处:http://www.cnblogs.com/tzyy/p/4768859.html
使用maven来管理java项目的更多相关文章
-
像Maven一样构建java项目的目录,更好的管理java工程的源码
都知道maven具有管理Java或者Javaweb的功能.我个人尤其看中的是其代码层次的分离.不同的代码在不同的文件夹下.这是在eclipse新建一个普通的工程无法实现的.而如果用maven实现有时候 ...
-
Jenkins 通过 maven 构建编译 JAVA 项目环境
Jenkins 通过maven 构建编译 JAVA 项目环境 官网下载合适Jenkins版本包: 1.jenkins http://mirrors.jenkins.io/war-stable/ 2.J ...
-
将 Maven生成的java项目转化为支持 Eclipse IDE的项目
转自: http://www.xuebuyuan.com/1297046.html 将 Maven生成的java项目转化为支持 Eclipse IDE的项目 在前一篇文章中,我们使用maven创建 ...
-
Linux上Makefile管理java项目
前面文章讲到了Linux上通过.spec文件与rpmbuild命令将java程序打包为RPM安装包, 现阶段遇到新的需求: 使用Makefile来操纵java的编译.打包 该需求以前面的内容为基础 可 ...
-
owner:轻松管理java项目配置
前段时间,一同事说在 github 上“活捉了”一个很有趣的开源项目,它是一个超轻量级的 jar 包,能够帮助你在 java 项目中摒弃样板式的 properties 配置代码,让你轻松自如地管理和使 ...
-
Eclipse+Maven整合开发Java项目(一)➣Maven基础环境配置
概述 Maven是一个Java语言编写的开源项目管理工具,是Apache软件基金会的*项目.主要用于项目构建,依赖管理,项目信息管理.有些项目需要添加响应的依赖包,Maven就是公用包集合.存在远程 ...
-
IntelliJ IDEA 将 Maven 构建的 Java 项目打包
前言 IntelliJ IDEA 编译生成 Jar 包的方式与 Eclipse 不同,如何将此 Maven 构建 Java 推荐引擎项目生成 Jar 包确实搜索了不少资料,有成功的有失败的,特将此验证 ...
-
Maven命令创建java项目
------------------------------java项目搭建--------------------------- 使用Maven构建一个简单的Java项目 1.进入命令行,执行下面的 ...
-
IntelliJ IDEA 打包Maven 构建的 Java 项目
方法 2,一键生成方便到哭 打开maven项目路径 一键生成 3.生成jar 目标文件在 path/target/xx.jar下面 方法 1 选中Java项目工程名称,在菜单中选择 F ...
随机推荐
-
Jquery、简单的下拉列表、网页左部导航菜单
简单的下拉菜单.左部导航使用. 2016-5-13 记 效果图如下: <!DOCTYPE html> <html lang="en"> <head&g ...
-
Linux中的find指令
find find是最常见和最强大的查找命令,在磁盘中查找文件,用它找到任何你想找的文件,就是速度有点慢. find path -option [ -print ] [ ...
-
php学习小技巧
1.print_r可打印数组 <?php echo '<p class="ajax">This paragraph was loaded with AJAX.&l ...
-
使用HttpURLConnection向服务器发送post和get请求(转)
一.使用HttpURLConnection向服务器发送get请求 1.向服务器发送get请求 @Test publicvoid sendSms() throws Exception{ String m ...
-
HDU 6140 Hybrid Crystals
Hybrid Crystals Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
-
斜率优化入门学习+总结 Apio2011特别行动队&;Apio2014序列分割&;HZOI2008玩具装箱&;ZJOI2007仓库建设&;小P的牧场&;防御准备&;Sdoi2016征途
斜率优化: 额...这是篇7个题的题解... 首先说说斜率优化是个啥,额... f[i]=min(f[j]+xxxx(i,j)) ; 1<=j<i (O(n^2)暴力)这样一个式子,首 ...
-
k8s构建镜像-基于centos的python环境+pip
FROM centos:7.4.1708 #维护者信息MAINTAINER by icdss # 标签LABEL version="1.0" # 安装依赖RUN yum -y up ...
-
用递归方法判断字符串是否是回文(Recursion Palindrome Python)
所谓回文字符串,就是一个字符串从左到右读和从右到左读是完全一样的.比如:"level" .“aaabbaaa”. "madam"."radar&quo ...
-
JavaScript基础知识点学习记录
一.简介: JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言,同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如相应用户的各种操作. J ...
-
CCF CSP 201409-2 画图
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-2 画图 问题描述 在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y ...