快速了解Maven

时间:2022-06-04 05:43:00

也许是本人不才,初识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]:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<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->abouteclipse中确认其支持maven:

快速了解Maven

在eclipse官方新版本中,已经内置有对maven的支持,如果版本比较旧可以去安装maven插件。

我们先来新建一个maven项目,new->project->mavenproject->createasimpleproject(skiparchetypeselection).

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

快速了解Maven

之后,我们去mvnrepository.com搜索"mysql jdbc"

快速了解Maven

很快,我们找到了结果,点击进入查看详细的版本信息:

快速了解Maven

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

快速了解Maven

复制maven框中的内容,把它们写到pom的<dependencies>下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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驱动包:

快速了解Maven

[其它特性]

1.镜像源

很明显,maven中心仓库负载比较大,而且不在国内,因此速度非常慢,有时甚至会找不到依赖。因此,尤其是在小规模团队开发这种场合下,搭建一个maven私服会极大的提升效率。这里推荐一个maven镜像搭建工具:nexus:http://www.sonatype.org/nexus/

使用它可以很快速方便的搭建私有maven镜像源,之后在maven的settings.xml里进行配置即可。

2.惰性下载src源码

在一些时候,我们需要参阅依赖项目的源文件,此时可以尝试直接双击class文件,如果maven镜像源中存在源文件,会自动下载到本地,eclipse会自动加载并显示。

3.编译参数配置

笔者使用eclipseluna版,maven默认的java编译版本为1.5,我们可以在pom指定其编译版本,使其提升至1.7(参考luajavapom中的build标签);此外这些设置也会被诸如jenkins持续集成等自动化工具读取并进行恰当配置。

总结

以上就是本文关于快速了解maven的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题。如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

原文链接:http://blog.csdn.net/shuzhe66/article/details/45009175