`
huangyongxing310
  • 浏览: 490816 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Maven 简单介绍

阅读更多
Maven 简单介绍

1.Maven以pom作为项目对象模型。


一个最简单的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/maven-v4_0_0.xsd">
	<!--
	//使用的maven的版本号
	-->
	<modelVersion>4.0.0</modelVersion>

	<!--
	//Mavem私服的配置,设定仓库,按设定顺序进行查找.
	//指定这个项目从那些仓库中进行下载,在settings.xml中写入是对所有maven项目
	-->
	<repositories>
		<!--
		//这里一般是仓库的镜像
		-->
		<repository>
			<id>public</id>
			<name>Team Nexus Repository</name>
			<url>http://localhost:8081/nexus/content/groups/public</url>
			<snapshots>
				<!--
				//snapshot版本构件下载的支持
				-->
				<enabled>true</enabled>
				<!--
				//maven的更新策略,always表示总是,never表示从不。daily(默认)表示每天,interval:X表示X分钟。
				-->
				<updatePolicy>always</updatePolicy>
			</snapshots>
			<releases>
				<enabled>true</enabled>
				<updatePolicy>always</updatePolicy>
			</releases>
		</repository>
	</repositories>
	<pluginRepositories>
		<!--
		//这里一般是仓库的镜像
		-->
		<pluginRepository>
			<id>public</id>
			<name>Team Nexus Repository</name>
			<url>http://localhost:8081/nexus/content/groups/public</url>
			<snapshots>
				<enabled>true</enabled>
				<updatePolicy>always</updatePolicy>
			</snapshots>
			<releases>
				<enabled>true</enabled>
				<updatePolicy>always</updatePolicy>
			</releases>
		</pluginRepository>
	</pluginRepositories>

	<!-- //项目发布到私服配置,在工程中进行包发布到服务器配置 -->
	<distributionManagement>
		<repository>
			<!--
			//这里ID要与settings.xml中server里的ID一致
			-->
			<id>nexus-releases</id>
			<name>Team Nexus Release Repository</name>
			<!--
			//这里URL不是镜像的URL,是仓库的URL
			-->
			<url>http://localhost:8081/nexus/content/repositories/releases</url>
		</repository>
		<snapshotRepository>
			<id>nexus-snapshots</id>
			<name>Team Nexus Snapshot Repository</name>
			<url>http://localhost:8081/nexus/content/repositories/snapshots</url>
			<!-- <uniqueVersion>false</uniqueVersion> -->
		</snapshotRepository>
	</distributionManagement>
	<!-- //Mavem私服的配置,设定仓库,按设定顺序进行查找. -->

	<!--
	//定义变量
	-->
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<!--
		//定义spring.version变量,下面使用是用"${spring.version}"就可以了
		-->
		<spring.version>1.2.6</spring.version>
		<developer.organization><![CDATA[xy公司]]></developer.organization>
	</properties>


	<!--
	//这个项目的maven坐标定义
	//groupId,组织标识,例如:org.codehaus.mojo,在M2_REPO目录下,将是: org/codehaus/mojo目录。就是项目坐标
	//artifactId,项目名称,例如:my-project,在M2_REPO目录下,将是:org/codehaus/mojo/my-project目录。就是项目模块坐标
	//packaging,打包的格式,可以为:pom (就是pom.xml的复制(可能会进行编码转码)), jar , maven-plugin , ejb , war , ear , rar , par
	//version,版本号,例如:1.0,在M2_REPO目录下,将是:org/codehaus/mojo/my-project/1.0目录。格式为:主版本.次版本.增量版本-限定版本号。
	//加SNAPSHOT发布时会放到SNAPSHOT版本管理处(版本后会有时间戳),加RELEASE或不加会入到RELEASE版本管理处
	//name,这个项目的名称,项目的名称, Maven产生的文档用
	//url,这个项目url,项目主页的URL, Maven产生的文档用
	-->
	<groupId>com.proserver</groupId>
	<artifactId>CESmart</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>CESmart</name>
	<url>http://www.midea.com.cn</url>

	<!--
	//项目开发者所属组织
	-->
	<organization> demo </organization>

	<!--
	//项目开发者所属组织的URL
	-->
	<organizationUrl> http://hi.baidu.com/banseon </organizationUrl>

	<!--
	//项目描述
	-->
	<description></description>

	<!--
	//项目开发者描述,参见developers/developer元素
	-->
	<developers></developers>

	<!--
	//项目的其他贡献者描述,参见developers/developer元素
	-->
	<contributor></contributor>

	<!--
	//项目license描述
	-->
	<licenses></licenses>

	<!--
	//这个项目依赖那些maven项目(就是别人放到仓库中的jar包(它也是一个maven项目,有它们的maven坐标))
	//要用到别人那些项目就引用它的maven坐标
	//maven会读取它们(jar包)里面的pom.xml文件,把它们项目依赖那些maven项目那会加载进来,这样你就可以引用别人的maven坐标就可以了,不用管它们的jar包
	//scope,compile(default),provided,runtime,test,system,import,就是这个jar只能在那里使用
	//1.compile,缺省值,适用于所有阶段,会随着项目一起发布。
	//2.provided,类似compile,期望JDK、容器或使用者会提供这个依赖。
	//3.runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
	//4.test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
	//5.system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
	//6.import,实现多继承(因为每个项目都只能申明唯一的一个父项目),用在<dependencyManagement>中实现引入多个父项目
	//exclusions,就是把那些包除外,不包含到本项目中,用于多版本的管理上
	//type,指定依赖项的类型
	//optional,依赖是否可选(默认false),当为true的时候,引入这个项目(A)的项目(B)是不会引入这个项目(A)引入的这个包(C)的,如果B要引入C就要求pom中自己引入了
	//1.假设以上配置是项目A的配置,即:Project-A --> Project-B。在编译项目A时,是可以正常通过的。
	//2.如果有一个新的项目X依赖A,即:Project-X -> Project-A。此时项目X就不会依赖项目B了。如果项目X用到了涉及项目B的功能,那么就需要在pom.xml中重新配置对项目B的依赖。
	//3.配置可选依赖的原因:1、节约磁盘、内存等空间;2、避免license许可问题;3、避免类路径问题,等等。
	//4.举例来说,一个类似hibernate的项目,它支持对mysql、oracle等各种数据库的支持,但是在引用这个项目时,我们可能只用到其对mysql的支持,此时就可以在这个项目中配置可选依赖。
	-->
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
			<type></type> //使用maven什么插件来处理依赖
			<optional></optional>
			<exclusions>
	                     <exclusion>
	                            <groupId>groupC</groupId>
	                            <artifactId>artifactC</artifactId>
	                     </exclusion>
              		</exclusions>
		</dependency>
	</dependencies>

	<!--
	//定义构建行为(就是如何构建项目(定义如何生成你想要的东西,如jar包、war包))
	-->
	<build>
		<!--
		-->
		<!--
		//进行打包时在工程目录下的生成文件的文件名,install时会更改为项目坐标定义时的文件名,它们两个内容一样,名字不一样
		-->
		<finalName>redis</finalName>
	</build>
</project>




Maven聚合
1.聚合,对多个项目进行聚合,每个子项目就会变成一个模块(各个模块为一个Maven项目),在总的项目pom中可以用<modules>进行聚合在一起,总的项目输出为pom,当进行打包是就不用一个个打包了,在总项目打包就会为每个模块打包(当然也可以一个个进行构建)
2.就是一个Maven项目里包含多个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">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.youzhibing.account</groupId>
  <artifactId>account-aggregator</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>pom</packaging>		//输出设置为POM

  <name>Account Aggrregator</name>
  <url>http://maven.apache.org</url>

  <modules>				//要聚合的模块
    <!-- 
      //模块都写在此处 
      //项目所在的目录路径,如:"../task-sla"
      -->
      <module>account-register</module>
      <module>account-persist</module>
  </modules>

</project>




Maven继承
1.继承,父项目把依赖放到<dependencyManagement>,这样子项目依赖就不用再写版本号和作用范围了(写groupId、artifactId就可以了),用<parent>引入父项目就可以了,它会往上找到第一个<dependencyManagement>中的版本号,保证版本号的一致。
父项目pom.xml中
<dependencyManagement>   //依赖管理,不会引入到项目中,提供了一种管理依赖版本号的方式
	<dependencies>
		<dependency>
		</dependency>
	</dependencies>
</dependencyManagement>

子项目pom.xml中
<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>1.4.1.RELEASE</version>
</parent>




依赖传递
1.A依赖B,B依赖C,那么A就依赖C了(就是会加入C包)
2.A可用在引入B时用<exclusion>排除依赖C(就是不加入C包)



依赖冲突
1.就是同时引入了多个版本的同一个包
2.短路优先,就是可以最先加入到项目中的版本
3.同样路径,先声明先优先


maven 打包源代码
1.需要使用到插件,因为maven本身没有这个功能,但package,compile,install是有的,但也可以用指定的版本来完成
<plugins>
	<plugin>
		<!--
		//插件坐标
		-->
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-source-plugin</artifactId>
		<version>2.2.1</version>
		<executions>
			<!--
			//执行行为控制
			-->
			<execution>
				<!--
				//定义一个任务的ID
				-->
				<id>attach-sources</id>
				<!--
				//定义工作在那个阶段进行
				-->
				<phase>package</phase>
				<goals>
					<!--
					//类似执行mvn source:jar,就是要执行的命令
					-->
					<goal>jar-no-fork</goal>
				</goals>
			</execution>
		</executions>
	</plugin>
</plugins>




Maven相关命令(Eclipse中不用mvn)
mvn -v 查看maven版本
mvn compile 编译,编译项目.java文作
mvn test 测试,运行测试用例,生成测试报告
mvn package 打包,生成jar、编译好的.class、测试报告放到target目录中,生成工程目录的jar包
mvn clean 删除target目录和里面和文件(.class)
mvn install 安装jar包到本地仓库中,复制pom.xml,xxx.jar到本地maven仓库中,更改为项目指定的名字xxx.pom,xxx.jar,当然jar里面是有原来pom.xml文件的
mvn deploy 将jar包上传安装到服务器仓库中


maven生命周期(就是各功能(命令)会经历了那些阶段工作)
maven阶段描述
清理、编译(compile)、测试(test)、打包(package)、集成测试、验证、部署(install)

clean,清理项目生命周期
1.pre-clean,执行清理前的工作
2.clean,清理上一次构建生成的所有文件
3.post-clean,执行清理后的文件

default,构建项目生命周期
1.compile,编译
2.test,测试
3.package,打包
4.install,部署

site,生成项目站点生命周期
1.pre-site,在生成项目站点前要完成的工作
2.site,生成项目的站点文件
3.post-site,在生成项目站点后要完成的工作
4.site-deploy,发布生成的站点到服务器上



maven插件
1.maven执行的命令都是通过执行插件来完成的,插件也是一个maven项目,也是通过指定坐标来得到的
2.当然大多数命令Maven已经自带,没有的才要指定插件来完成

<build>
	<plugs>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>//对原码进行打包的插件
			<artifactId>maven-source-plugin</artifactId>
			<version>2.4</version>
			<executions>	//执行参数设置
			    <execution>
			        <id>add-resource</id>
			        <phase>package</phase> //执行package阶段时执行
			        <goals>				//生成目标
			            <goal>jar-no-fork</goal> //生成目标命令
			        </goals>
			        <configuration>	//配置参数
			            <resources>	//这个元素描述了项目相关的所有资源路径列表,例如和项目相关的属性文件,这些资源被包含在最终的打包文件里。
			                <resource>	//这个元素描述了项目相关或测试相关的所有资源路径
			                    <directory>src/main/java</directory>//描述存放资源的目录,该路径相对POM路径
			                    <includes>	//包含的模式列表,例如**/*.xml.(就是用于进行匹配那些文件要打到包里的)
			                        <include>**/*.xml</include>
			                    </includes>
			                </resource>
			            </resources>
			        </configuration>
			    </execution>
			</executions>
		</plugin>
	<plugs>
</build>



参考原文(pom.xml 配置详解):http://blog.csdn.net/longeremmy/article/details/9670619
参考原文(pom.xml详解):http://blog.csdn.net/adeyi/article/details/17259479
参考原文(maven可选依赖):http://www.tuicool.com/articles/yaeIV3
参考原文(Dependency介绍):http://elim.iteye.com/blog/2057317
参考原文(pom.xml 配置详解):http://www.cnblogs.com/skyme/archive/2011/08/19/2146145.html
参考原文(源码打包插件):http://www.tuicool.com/articles/NFvAbm
参考原文(源码打包插件):https://my.oschina.net/xiaokaceng/blog/210498
参考原文(源码打包插件):http://blog.csdn.net/chs_jdmdr/article/details/42419191
参考原文(modules、parent、properties以及import):http://www.cnblogs.com/youzhibing/p/5427130.html
参考原文(pom.xml 配置详解):http://www.cnblogs.com/yangxia-test/p/4409736.html
参考原文(deploy出错处理):http://www.javatang.com/archives/2010/01/23/4518375.html
参考原文(Maven仓库):http://juvenshun.iteye.com/blog/359256
参考原文(Maven module):http://www.cnblogs.com/xdp-gacl/p/4242221.html
参考原文(Maven最佳实践:划分模块):http://juvenshun.iteye.com/blog/305865
分享到:
评论

相关推荐

    maven的简单介绍.html

    ### 一、Maven是什么 Maven是一款基于服务Java平台的自动化构建工具 **构建**就是以“Java源文件”、“框架配置文件”、“JSP”、“HTML”、“图片”等资源为“原材料”,去生产一个可以运行的项目的过程 ### ...

    Maven的简单使用

    ### Maven的简单使用 #### Maven简介 Maven是一款由Apache软件基金会提供的开源项目管理工具,主要用于Java项目的构建、依赖管理和项目信息管理。它基于项目对象模型(POM),通过一系列标准化的任务来帮助开发者更...

    Maven心得,简单介绍maven。

    它的简单操作接口有助于团队快速构建和测试,同时,由于 Maven 能自动生成项目报告,团队成员可以实时获取反馈,加速迭代过程。Maven 还可以通过持续集成服务器,如 Jenkins,实现自动化构建和测试,确保代码质量。 ...

    maven多模块项目(简单实例)

    本实例将详细介绍如何创建和管理一个简单的Maven多模块项目。 首先,我们要理解Maven的模块关系。在Maven中,多模块项目是由一个父模块(Parent Module)和若干子模块(Child Modules)组成。父模块主要负责定义...

    ssm+maven简单整合

    在本项目中,我们将探讨如何将这三个框架与Maven进行简单整合,并在JDK 1.8和Tomcat 9的环境下运行。 首先,我们需要理解每个组件的作用: 1. **Spring**:这是一个全面的轻量级应用程序框架,提供了AOP(面向切面...

    Maven exec-maven-plugin:执行外部命令的实践指南

    本文详细介绍了exec-maven-plugin的基本概念、配置方法、执行简单和系统脚本、捕获命令输出、条件执行、并发执行、使用环境变量、错误处理、高级配置、使用案例以及局限性。通过这些知识点,读者可以更加自信地在...

    maven教程-maven教程-maven教程

    通过本文的介绍,我们可以了解到Maven的基本概念、安装配置、基本使用和深入应用详解。 Maven的基本概念包括POM(Project Object Model,项目对象模型)、标准集合(archetype)、项目生命周期和依赖管理系统。POM...

    Maven Web基础搭建示例

    本示例将详细介绍如何使用Maven搭建一个基础的Web项目,并解决创建过程中可能出现的报错问题。 ### 一、Maven环境配置 首先,确保你已经安装了Java Development Kit (JDK),因为Maven是基于Java的。接着,下载Maven...

    maven的介绍.docx

    ### Maven的介绍与应用 **Maven** 是一个在Java开发领域内被广泛采用的项目管理工具,由Apache软件基金会维护和支持。它以其强大的功能、灵活性以及对多种编程语言的支持而受到开发者的青睐。本文将从Maven的定义...

    Maven3.5~3.6.3各版本下载

    下面,我们将对Maven 3.5~3.6.3各版本的下载进行详细介绍。 Maven 3.5版本 Maven 3.5是Maven的稳定版,发布于2016年10月。该版本引入了许多新的功能和改进,例如: * 改进了DEPENDENCY MANAGEMENT机制,支持多个...

    maven eclipse 培训教程

    Maven in action.pdf Maven2+Eclipse开发J2EE.pdf ...Maven简单实用教程.docx OTNVD_WebLogicServerDevelopment_CN.pdf 《Maven实战》(国内首本Maven著作)(Maven的安装、配置及使用入门) 《Maven权威指南》.pdf.pdf

    Maven使用介绍(PPT)

    Maven通过引入项目对象模型(POM)、坐标系统、仓库、生命周期和插件等概念,使得构建过程可以自动化进行,只需要通过简单的命令,就可以完成编译、运行单元测试、生成文档、打包、部署等构建工作,从而大幅提高了...

    maven的介绍及相关学习资源推荐

    Maven的设计原则是基于项目对象模型(Project Object Model,简称POM)的概念,使得开发者可以通过简单的XML配置文件来定义项目的结构和构建过程。 #### Maven的核心功能 1. **依赖管理**:Maven能够自动下载并...

    maven+springmvc简单实例demo

    【标题】"maven+springmvc简单实例demo"是一个基于Maven和Spring MVC框架的简易示例项目,旨在帮助开发者快速理解如何将这两个强大的工具结合使用来构建Java Web应用程序。Maven是Apache软件基金会开发的一个项目...

    maven模块化简单的ssh

    而"Maven模块化简单的SSH"这个标题意味着我们将探讨如何使用Maven构建工具来实现SSH(Spring、Struts和Hibernate)框架的模块化项目。 **Maven模块化** Maven是Apache软件基金会开发的一款项目管理和集成工具,它...

    Maven权威指南_maven_

    《Maven权威指南》是Java开发者必备的工具书,它全面而深入地介绍了Maven这一强大的项目管理和构建工具。Maven不仅仅是一个编译工具,更是Java开发过程中的一个中心枢纽,它简化了项目的构建、依赖管理和文档生成等...

Global site tag (gtag.js) - Google Analytics