Maven 简单介绍

[b]Maven 简单介绍[/b]

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


[b]一个最简单的pom.xml[/b]
<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>



[b]Maven聚合[/b]
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>



[b]Maven继承[/b]
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>



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


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


[b]maven 打包源代码[/b]
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>



[b]Maven相关命令(Eclipse中不用mvn)[/b]
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包上传安装到服务器仓库中


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

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

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

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


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jie310600

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值