zoukankan      html  css  js  c++  java
  • 5.7 Maven通俗讲解

    好的东西只适合ctry+c+v


    原文地址:https://blog.csdn.net/shuzhe66/article/details/45009175 

    Maven通俗讲解

        也许是本人不才,初识Maven时,被各种不明所以的教程搞得一头雾水,而在后来的使用中,我发现Maven大部分功能没有想象的那么困难。

        本片文章面向Maven初学者,希望能让其以最快的速度了解Maven并享受到它所带来的一系列好处。
    [一个简单的问题]
        在进行讲解前,先提问一个简单的问题。
        假如你正在Eclipse下开发两个Java项目,姑且把它们称为A、B,其中A项目中的一些功能依赖于B项目中的某些类,那么如何维系这种依赖关系的呢?
        笔者在使用Maven前是这样做的,将B项目打包为jar,并在A项目的Library下导入B的jar文件。
        这样做有着很明显的缺点:
            1.如果在开发过程中,发现B中的bug,则必须重新将B打包并对A项目进行重编译操作
            2.在协同开发A项目时,为了保证其能够正常运行,要么选择将B打包入A中,要么选择将B一样发布出去并告知开发者使用方法。显然这两个方法都不太好,前者可能造成资源浪费(比如开发者可能正在开发依赖B的其它项目,B已经存储到本地了),而后者则会为项目正常运行带来风险(一旦把工作交给人工注定会带来一定的失败率)。
        因此,这样手动的控制项目间依赖关系显然是一种‘拙劣’的方法。
    [Maven介绍]
        依据笔者看来,Maven的核心功能便是合理叙述项目间的依赖关系。
        所有的Maven项目包含着一个名为pom.xml的文件,在文件中记录着自己的<groupId><artifactId><version>等字段,这些字段在创建Maven项目时填写,Maven会依据它们来定位到该项目。
        在pom中的另一个关键标签是<dependencies>,该标签下可以包含若干个<dependency>标签,而<dependency>下则是上面介绍的<groupId><artifactId><version>等依赖字段,它们确定着一个唯一的项目版本。

    一个典型的pom.xml[来自项目luajava]:

    <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>org.keplerproject</groupId>
    <artifactId>luajava</artifactId>
    <version>1.1</version>
    <packaging>jar</packaging>

    <name>luajava</name>
    <url>http://maven.apache.org</url>

    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <build>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.0.2</version>
    <configuration>
    <source>1.7</source>
    <target>1.7</target>
    </configuration>
    </plugin>
    </plugins>
    </build>
    <dependencies>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
    </dependency>
    </dependencies>
    </project>


    [Maven库]
        以刚才的A、B项目为例,在A项目的pom文件中写入<dependency>关联B项目,Maven会在工作区中找到B项目,并创建依赖。此时A项目可以直接访问到B项目中的类资源,而且对A调试时依然会击中B项目中设置的断点。
        除去工作区的依赖关联外,Maven也可以关联一个远端镜像中的项目,在默认情况下,如果工作区中没有对应的项目记录,Maven会连接到中心仓库查找,如果找到,它会把项目下载到本地库中(Windows中本地库位于用户文档的.m2目录下),并自动设置关联。这是一个十分便利的特性,在我们需要额外jar包支持时,不再需要进行手动的下载和引入,我们仅需要将需要项目对应的依赖字段粘贴到pom的合适位置,剩下的交给Maven完成即可。
    [一个例子]
        那么,我们如何知道所需项目的groupId等字段呢?
        一般而言,如果官方项目支持Maven,在其页面一般会有一段依赖字段以供复制,但也确实存在支持Maven但没有给出依赖字段的情况。而另一些项目的Maven特性由第三方维护,此时从官方渠道获得对Maven的支持比较困难。
        因此,查询依赖字段首选的方案,是使用Maven搜索服务进行搜索。
        这里笔者推荐一个地址:mvnrepository.com
        下面以使用Eclipse关联MySqlJDBC驱动为例子,在此之前,请在Help->About Eclipse中确认其支持Maven:
        
        在Eclipse官方新版本中,已经内置有对Maven的支持,如果版本比较旧可以去安装Maven插件。
        我们先来新建一个Maven项目,New ->Project ->Maven Project->Create a simple project (skip archetype selection).

        下面是这步比较重要,填写这个项目的GroupId等依赖字段,这里填写的字段会在其它项目对其依赖时用到,未填写的部分都为选填内容:

        

        之后,我们去mvnrepository.com搜索"MySql JDBC"
        
        很快,我们找到了结果,点击进入查看详细的版本信息:

        

        这里列出了MySql JDBC的多个版本及使用情况,这里我们选择一个第二新的版本5.1.34:
        

        复制Maven框中的内容,把它们写到pom的<dependencies>下:
        
    <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.test</groupId>
    <artifactId>maventest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <dependencies>
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.34</version>
    </dependency>
    </dependencies>
    </project>


        在Progress读条结束后,可以看到项目中多出Maven Dependencies,里面可以找到我们刚刚引入的jdbc驱动包:

        

        此时已经可以在开发中正常使用jdbc了。
    [其它特性]
        1.镜像源
    很明显,Maven中心仓库负载比较大,而且不在国内,因此速度非常慢,有时甚至会找不到依赖。因此,尤其是在小规模团队开发这种场合下,搭建一个Maven私服会极大的提升效率。这里推荐一个Maven镜像搭建工具:Nexus:http://www.sonatype.org/nexus/
    使用它可以很快速方便的搭建私有Maven镜像源,之后在Maven的settings.xml里进行配置即可。
        2.惰性下载src源码
    在一些时候,我们需要参阅依赖项目的源文件,此时可以尝试直接双击class文件,如果Maven镜像源中存在源文件,会自动下载到本地,eclipse会自动加载并显示。
        3.编译参数配置
    笔者使用Eclipse Luna版,Maven默认的Java编译版本为1.5,我们可以在pom指定其编译版本,使其提升至1.7(参考luajava pom中的build标签);此外这些设置也会被诸如jenkins持续集成等自动化工具读取并进行恰当配置。
    ---------------------


  • 相关阅读:
    据说,能找出15个以上的的视力才正常....
    看看用PS来转基因的动物,居然很欢乐!!
    《天引》读书笔记——由新月形面积引发的人类长达2000年的探索。
    练习使用策略模式
    折半查找
    UltraEdit常用配置&搭建Java/C开发环境
    一个操作系统的实现_十分钟完成的操作系统——到这里博客迁移工作圆满结束
    C++中的变量初始化
    LeetCode Range Sum Query
    Peeking Iterator
  • 原文地址:https://www.cnblogs.com/wym591273/p/10831815.html
Copyright © 2011-2022 走看看