标签:
本文几乎没有什么价值,大家可以跳过,我会将有价值的部分整理发布在下一篇博客。
maven是什么?回答可以有很多,百度一下得到的结果在有限的时间内应该是看不完的,我也不打算在这里把那些别人说的粘贴过来,我打算尽量用自己的话把我自己认识到的maven说一下。
由于是“我自己认识到的maven”,所以有什么不对的地方恳请大家指正,先谢谢啦。
maven是Apache基金会的项目,可以理解为一个软件,更可以理解为一种开发管理方式,下面就是关于他的很有用的资料:
eclipse的m2e项目:https://projects.eclipse.org/projects/technology.m2e
osc的maven仓库:http://maven.oschina.net/home.html
其他的还有很多,最主要的还是官方网站和中央仓库。
maven是一个使用java语言开发的软件,负责java项目的依赖管理、项目构建、项目模块管理、部署发布和运行等等功能,我们在很多的java开源项目中都可以看到一个叫做"pom.xml"的文件,而且而且很多时候java源代码都放在叫做“src/main/java”的路径下,这就是使用了maven的项目。
maven之前,人们要做同样的事都是使用ant——Apache的另外一个项目,但是现在越来越多的人都在使用maven了,这就好像git出现之后有越来越多的人使用git一样,哪一个更好用就用哪一个。
更多的关于maven的“正式”的介绍我就不说了,因为我也说不好,大家还是看官方网站的说明吧,或者百度一下也有很多不错的说明,下面我着重说一下我自己使用maven的体会。
我是在大二开始学习java的,当时就是用eclipse开发,新建工程、编写代码、运行代码,顶多来一个tomcat部署(热部署),后来还在网上看了打包war和jar,觉得好牛逼,这个和班上另外学asp.net的比起来好多了,因为他们一直都只能在vs里面运行根本不会打包发布,我还可以打包发布到另外的机器上去。
后来大四除去公司里面实习,当时由于各种原因,就我一个人负责java方面的开发,全部东西都是我自己来,后来由于一些原因需要让工程能够在不需要IDE环境的情况下打包,而且还有可能是不懂java的人来操作(当时具体的情况忘了)。我就网上找资料,反正我心里觉得是可以做到的,后来就找到了maven。
当时是2014年的年初,大概在1月份左右吧,之前寝室里有一个哥们儿使用过maven,我也没有太在意,觉得没有什么实际用途(是不是很目光短浅?),之后就是摸石头过河,一周之后我就觉得根本离不开maven了。
一直到现在,我的所有项目都是使用maven的。
这个问题很难回答,我先说点题外话。
大一的时候学过linux,但当时根本没有当回事,也就是混过去了。到了大三,又学习一些课程,有许多都涉及到了linux,这时就有意识的去了解、熟悉了linux,之后我就完全的喜欢上了它,而且热衷于RedHat系的(如今公司里面的工作机就是Fedora)。
回过头来,对于maven,我刚开始只是把它当作工具,仅仅是为了完成能让“外行人”能打包出部署包。后来等我用了之后,就发觉绝对不能没有他啊。
(使用maven)以前我们开发的时候第一步就是新建工程(参看前一篇博客),里面有很多与环境相关的参数需要指定,虽然有默认值,但是每次还是需要很仔细的查看一下,而且如果是多人一起开发的话,每个人之间环境上的一点小小的差异就有可能引发很大的问题。
第二步就是引入依赖的各种库,这也是很头疼的一项工作,先要找到对应的jar文件,然后需要根据项目类型将文件以合理的方式引入进来,还需要放入版本控制里面,以后更换的话还需要重新来过。而且这还是顺利的情况,不顺利的话……哎,说多了都是泪啊,做过的人都懂的。
接下来就是编写代码、测试,这没什么。
有时候需要打包到不是自己机器的环境中去进行运行,(测试、正式发布等等),eclipse自己有相关的向导可以进行这个操作,熟悉了之后也没有什么问题,只不过就是繁琐一点,而且有可能会出错。如果需要反复打包很多次的话,估计有点够呛。
而在使用了maven之后,pom.xml就是一个项目的所有配置(从某一些方面来说,一个pom.xml不够,但是确实一个工程一个pom.xml足够),引入依赖只需要说清楚你要的是什么就行了,打包也就是一条命令的事。多个人之间环境不一致的问题几乎不会出现(少数情况下也会出现)。
这似乎就是我为什么会爱上它的原因。
maven是用java写的,所以要使用maven,需要的条件有:合适版本以及架构的maven软件、java运行环境、网络。
前面两个很好理解,后面的网络是怎么回事?很简单,①maven是基于插件的,直接下载的maven软件不足以完成其基本功能,需要从网络下载;②项目配置的依赖库不可能凭空出现吧,需要从网络上下载。当然,这些对网络的需要不是每时每刻都需要的,maven会将下载来的文件存在本地,只有在需要的文件本地没有的情况下才会从网络下载,系在的地方在没有配置的情况下就是中央仓库,有时候网络不好的话就有点困难了,好在我们还有OSC的maven镜像(http://maven.oschina.net/home.html),同时我还建议有田间的话,可以搭建maven的私有仓库,搭建方法在这里:http://my.oschina.net/songxinqiang/blog/343477这个是我自己搭建私有仓库的记录。
这些外在的说了,对于要使用maven的项目来说,还需要一些内在的条件,硬性需求就只有一个:pom.xml文件。非必须的条件就是文件按照一定的组织方式进行放置,之所以这个不是必须的,是因为可以再pom.xml文件中对没有按照要求放置的文件进行配置说明。
maven的配置使用的是xml,而且在maven内部有一个基础的配置,我们的配置实际上是“继承”下来的,一般称为“约定”,所谓的“约定优于配置”(我认为更应该说成“配置优于约定”,因为你配置了那么约定就不起作用了)。至于pom.xml到底该怎么配置,这个还得根据项目情况来说,可以参考官方说明来做,不过通用的、都有的配置包括:项目坐标、依赖、构建方式、打包配置。(具体配置内容不在本文讨论范围)
前面说了,maven对项目的文件结构有一个“约定”的,如果按照这个来放文件,就不用单独配置了,而且一想都知道,我们应该尽量按照这个“约定”来放,下面就说一下默认的文件结构是什么样子的(只说常见到的文件)。
a.java源文件:src/main/java
b.配置文件:src/main/resources
c.测试的java源文件:src/test/java
d.测试的配置文件:src/test/resources
e.web项目的web根目录:src/main/webapp
f.编译输出目录(maven编译的时候用,我们不用管):target
这些在eclipse的pom.xml查看里面可以通过“Effective POM”查看到的,在<build>里面
<sourceDirectory>E:\Workspaces\GITWDir\Billing\src\main\java</sourceDirectory> <scriptSourceDirectory>E:\Workspaces\GITWDir\Billing\src\main\scripts</scriptSourceDirectory> <testSourceDirectory>E:\Workspaces\GITWDir\Billing\src\test\java</testSourceDirectory> <outputDirectory>E:\Workspaces\GITWDir\Billing\target\classes</outputDirectory> <testOutputDirectory>E:\Workspaces\GITWDir\Billing\target\test-classes</testOutputDirectory> <resources> <resource> <directory>E:\Workspaces\GITWDir\Billing\src\main\resources</directory> </resource> </resources> <testResources> <testResource> <directory>E:\Workspaces\GITWDir\Billing\src\test\resources</directory> </testResource> </testResources> <directory>E:\Workspaces\GITWDir\Billing\target</directory>
可以看到,这里的路径都已经转成了文件系统里面的绝对路径的了。
树形图大概是这个样子的(将没有必要的部分内容删去):
│ pom.xml │ ├─src │ ├─main │ │ ├─java │ │ │ │ │ ├─resources │ │ │ log4j.properties │ │ │ spring-config.xml │ │ │ spring-mvc.xml │ │ │ │ │ └─webapp │ │ │ │ │ └─WEB-INF │ │ web.xml │ │ │ └─test │ └─java │ └─target ├─classes │ ├─m2e-wtp │ └─web-resources │ └─META-INF │ │ MANIFEST.MF │ │ │ └─maven │ └─test-classes
详细的细节在后面的博客中会进行说明。
要知道maven是一个什么样的软件,使用maven的项目是什么样子的,怎么使用maven(这个问题后面会进行详细说明)。
有什么不对的地方还望大家指出来。
下一篇博客是对本文的整理。
enjoy!
使用Eclipse-Maven-git做Java开发(6)--介绍一下maven
标签:
原文地址:http://my.oschina.net/songxinqiang/blog/505380