文档章节

Maven通俗讲解

o
 osc_x4h57ch8
发布于 2018/04/24 23:31
字数 1213
阅读 0
收藏 0

精选30+云产品,助力企业轻松上云!>>>

也许是本人不才,初识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完成即可。

[其它特性]

    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持续集成等自动化工具读取并进行恰当配置。

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

物联网开发服务开发虚拟设备需要几步?

云栖号快速入门:【点击查看更多云产品快速入门】 不知道怎么入门?这里分分钟解决新手入门等基础问题,可快速完成产品配置操作! 物联网平台设备的正常开发流程是:设备端开发完成,设备上报...

osc_2axit9df
41分钟前
18
0
互联网互联网必看文章墙裂推荐

后端必看文章系列 大型项目架构演进过程及思考的点

code-ortaerc
42分钟前
20
0
ACL2020论文整理 - 知乎

ACL2020录取文章已经放出,链接如下: ACL2020论文集合 www.aclweb.org 为了以后更加方便地阅读论文,也本着一颗开源之心,花一个下午的时间整理了一下相关论文。鉴于本人精力有限,并且也只...

osc_5w65ebjo
43分钟前
10
0
SU(N) Hubbard 模型平均场

osc_31d5oo2i
45分钟前
18
0
Python语言及其应用PDF高清完整版百度云盘免费下载|python基础教程PDF电子书推荐

编辑推荐 本书内容易于理解,而且读起来生动有趣,是编程和Python初学者不可多得的教程。书中首先介绍了Python的基础知识,然后逐渐深入多种主题,结合教程和攻略式风格来讲解Python 3中的概...

osc_nbg2lo7i
45分钟前
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部