码迷,mamicode.com
首页 > 编程语言 > 详细

使用Eclipse-Maven-git做Java开发(6)--介绍一下maven

时间:2015-09-12 20:31:28      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:

        本文几乎没有什么价值,大家可以跳过,我会将有价值的部分整理发布在下一篇博客。

        maven是什么?回答可以有很多,百度一下得到的结果在有限的时间内应该是看不完的,我也不打算在这里把那些别人说的粘贴过来,我打算尽量用自己的话把我自己认识到的maven说一下。

        由于是“我自己认识到的maven”,所以有什么不对的地方恳请大家指正,先谢谢啦。

0、可以参考的资料

        maven是Apache基金会的项目,可以理解为一个软件,更可以理解为一种开发管理方式,下面就是关于他的很有用的资料:

                官方网站:http://maven.apache.org/

                中央仓库:http://search.maven.org/

                eclipse的m2e项目:https://projects.eclipse.org/projects/technology.m2e

                osc的maven仓库:http://maven.oschina.net/home.html

        其他的还有很多,最主要的还是官方网站和中央仓库。

1、maven

        maven是一个使用java语言开发的软件,负责java项目的依赖管理、项目构建、项目模块管理、部署发布和运行等等功能,我们在很多的java开源项目中都可以看到一个叫做"pom.xml"的文件,而且而且很多时候java源代码都放在叫做“src/main/java”的路径下,这就是使用了maven的项目。

        maven之前,人们要做同样的事都是使用ant——Apache的另外一个项目,但是现在越来越多的人都在使用maven了,这就好像git出现之后有越来越多的人使用git一样,哪一个更好用就用哪一个。

        更多的关于maven的“正式”的介绍我就不说了,因为我也说不好,大家还是看官方网站的说明吧,或者百度一下也有很多不错的说明,下面我着重说一下我自己使用maven的体会。

2、初识maven

        我是在大二开始学习java的,当时就是用eclipse开发,新建工程、编写代码、运行代码,顶多来一个tomcat部署(热部署),后来还在网上看了打包war和jar,觉得好牛逼,这个和班上另外学asp.net的比起来好多了,因为他们一直都只能在vs里面运行根本不会打包发布,我还可以打包发布到另外的机器上去。

        后来大四除去公司里面实习,当时由于各种原因,就我一个人负责java方面的开发,全部东西都是我自己来,后来由于一些原因需要让工程能够在不需要IDE环境的情况下打包,而且还有可能是不懂java的人来操作(当时具体的情况忘了)。我就网上找资料,反正我心里觉得是可以做到的,后来就找到了maven。

        当时是2014年的年初,大概在1月份左右吧,之前寝室里有一个哥们儿使用过maven,我也没有太在意,觉得没有什么实际用途(是不是很目光短浅?),之后就是摸石头过河,一周之后我就觉得根本离不开maven了。

        一直到现在,我的所有项目都是使用maven的。

3、maven为什么让我离不开

        这个问题很难回答,我先说点题外话。

        大一的时候学过linux,但当时根本没有当回事,也就是混过去了。到了大三,又学习一些课程,有许多都涉及到了linux,这时就有意识的去了解、熟悉了linux,之后我就完全的喜欢上了它,而且热衷于RedHat系的(如今公司里面的工作机就是Fedora)。

        回过头来,对于maven,我刚开始只是把它当作工具,仅仅是为了完成能让“外行人”能打包出部署包。后来等我用了之后,就发觉绝对不能没有他啊。

        (使用maven)以前我们开发的时候第一步就是新建工程(参看前一篇博客),里面有很多与环境相关的参数需要指定,虽然有默认值,但是每次还是需要很仔细的查看一下,而且如果是多人一起开发的话,每个人之间环境上的一点小小的差异就有可能引发很大的问题。

        第二步就是引入依赖的各种库,这也是很头疼的一项工作,先要找到对应的jar文件,然后需要根据项目类型将文件以合理的方式引入进来,还需要放入版本控制里面,以后更换的话还需要重新来过。而且这还是顺利的情况,不顺利的话……哎,说多了都是泪啊,做过的人都懂的。

        接下来就是编写代码、测试,这没什么。

        有时候需要打包到不是自己机器的环境中去进行运行,(测试、正式发布等等),eclipse自己有相关的向导可以进行这个操作,熟悉了之后也没有什么问题,只不过就是繁琐一点,而且有可能会出错。如果需要反复打包很多次的话,估计有点够呛。

        而在使用了maven之后,pom.xml就是一个项目的所有配置(从某一些方面来说,一个pom.xml不够,但是确实一个工程一个pom.xml足够),引入依赖只需要说清楚你要的是什么就行了,打包也就是一条命令的事。多个人之间环境不一致的问题几乎不会出现(少数情况下也会出现)。

        这似乎就是我为什么会爱上它的原因。

4、怎么样使用maven

        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到底该怎么配置,这个还得根据项目情况来说,可以参考官方说明来做,不过通用的、都有的配置包括:项目坐标、依赖、构建方式、打包配置。(具体配置内容不在本文讨论范围)

5、maven项目的默认文件结构

        前面说了,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

        详细的细节在后面的博客中会进行说明。

6、需要了解的是什么

        要知道maven是一个什么样的软件,使用maven的项目是什么样子的,怎么使用maven(这个问题后面会进行详细说明)。



        有什么不对的地方还望大家指出来。

        下一篇博客是对本文的整理。

        enjoy!












使用Eclipse-Maven-git做Java开发(6)--介绍一下maven

标签:

原文地址:http://my.oschina.net/songxinqiang/blog/505380

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!