您的位置:首页 > 其它

Maven 简单介绍

2015-10-24 16:06 387 查看
在java世界中,工程管理是靠maven(在c/c++中是make),在研究任何一款开源软件,尤其像opendaylight这种大型开源软件,如果能够梳理清楚各个工程依赖,对于我们学习与研发会起到事半功倍的效果。由于接触maven时间不是很长,这里如果有什么不对,请各位批评指出。

一、maven环境配置

众所周知,maven是跨平台,因此无论你把它安装在什么系统上,它都可以很好的为我们工作。由于我经常在linux环境下工作,因此在介绍maven的相关东西都是基于linux。

1、目录结构

maven下载下来,我们通过tar命令将其解压到/usr/local/bin/目录下面,如下所示:



maven的目录结构还是非常清楚与简单的。 虽然有四个目录,但是我们经常用的只有两个,那就是bin、conf目录。通过目录名字大家应该就能猜到他们作用。bin目录是存放可执行程序,也就是mvn命令行所在目录。 conf存在maven相关的配置,如本地仓库、远程仓库、代理等。boot 和 lib 分别是maven它自己所用到的库或者插件 等。

2、配置文件和可执行文件

2.1 maven配置文件

2.1.1全局配置文件

在conf目录下面存在一个全局配置文件,settings.xml。如果大家熟悉linux话的就能比较容易理解全局配置这个意思啦。这个文件就相当于/etc/profile文件,每个登录linux用户他们shell终端会自动继承/etc/profile文件中配置。那么这个settings.xml也是这样的,项目管理员可以为不同的项目组成员分配配置不同权限。下面我们来分析一下settings.xml文件内容。

<localRepository>绝对路径</localRepository> //本地仓库存储路径,默认为${user.home}/.m2/repository 例如:登录linux当前用户为tmp,则默认本地仓库为/home/tmp/.m2/repository

<pluginGroups>

<!-- pluginGroup

| Specifies a further group identifier to use for plugin lookup.

<pluginGroup>com.your.plugins</pluginGroup>

-->

</pluginGroups> 项目所有者。 一般以公司域名逆序加项目名称。 例如opendaylight项目中的controller是这样的:org.opendaylight.controller

<mirrors>

<mirror>

<id>mirrorId</id>

<mirrorOf>repositoryId</mirrorOf>

<name>Human Readable Name for this Mirror.</name>

<url>http://my.repository.com/repo/path</url>

</mirror>

</mirrors> 为了节省流量和方便开发,很多个公司都会创建自己的私服。此处的镜像就是为了创建私服。

<servers>

<server>

<id>deploymentRepo</id>

<username>repouser</username>

<password>repopwd</password>

</server>

</servers> 连接服务器管理用户和密码

<proxies>

<!-- proxy

| Specification for one proxy, to be used in connecting to the network.

|

<proxy>

<id>optional</id>

<active>true</active>

<protocol>http</protocol>

<username>proxyuser</username>

<password>proxypass</password>

<host>proxy.host.net</host>

<port>80</port>

<nonProxyHosts>local.net|some.host.com</nonProxyHosts>

</proxy>

-->

</proxies> 链接私服的代理。

2.1.2局部配置文件(单用户)

就像linux用户一样,每一个用户都有一个自己shell配置文件(.bashrc),maven也是这样支持,单用户的配置。在settings.xml文件注释就有说,建议每个用户复制一份settings.xml到自己目录中(默认:/home/username/.m2目录)。这样maven就支持单用户,用户自己就可以创建自己专属的maven。

2.2 maven可执行文件

maven的可执行文件,其实都是脚本文件,我们可以通过vi打开查看,内容比较简单,就是调用一些环境变量。下面是bin目录中内容,

1) 其中带有.cmd是window下面的,不带.cmd则是linux下面的。

2) 带有debug字样的文件是支持,maven自身调试用的。我们一般用不到。 mvnyjp不清楚是什么作用,基本上不用。

3) m2.conf 环境变量配置,maven启动会加载它。



二、maven常见命令行

下面是maven常用命令行:

mvn compile --- 编译工程

mvn packet --- 打包(包括第一步骤)

mvn install --- 安装到本地仓库(包括前两步骤)

mvn clean --- 清除代码中生成的临时文件(target目录)

mvn test-compile --- 编译单元测试

mvn test --- 编译并运行单元测试

-Dmaven.test.skip=true --- 跳过单元测试 例如: mvn install -Dmaven.test.skip=true

三、Pom文件常见属性

C语言中将各个工程/模块组织起来是通过makefile,那么在maven中是通过pom.xml文件组织的(POM是项目对象模型)。我们接下来会介绍一些常用属性。

         <span style="font-size:14px;"><project>
<span style="color:#FF0000;">           <modelVersion>4.0.0</modelVersion>  描述这个POM文件是遵从哪个版本的项目描述符。 默认是4.0.0
           <!- The Basics   项目的基本信息->
           <groupId>经常是公司域名逆序形式</groupId>
           <artifactId>项目名称</artifactId>
           <version>项目版本号</version>   //红色部分是必须包含的配置项</span>
           <packaging>...</packaging>
           <dependencies>本项目依赖工程</dependencies>
           <parent>本项目的pom文件所继承父pom文件</parent>
           <dependencyManagement>...</dependencyManagement>
           <modules>本项目中其他的模块</modules>
           <properties>...</properties>
           <!- Build Settings  项目的编译设置->
           <build>...</build>
           <reporting>...</reporting>
           <!- More Project Information 其它项目信息 ->
           <name>...</name>
           <description>...</description>
           <url>...</url>
           <inceptionYear>...</inceptionYear>
           <licenses>...</licenses>
           <organization>...</organization>
           <developers>...</developers>
           <contributors>...</contributors>
           <!-- Environment Settings  ->
           <issueManagement>...</issueManagement>
           <ciManagement>...</ciManagement>
           <mailingLists>...</mailingLists> 
           <scm>...</scm>
           <prerequisites>...</prerequisites>
           <repositories>...</repositories>
           <pluginRepositories>...</pluginRepositories>
           <distributionManagement>...</distributionManagement>
           <profiles>...</profiles>
         </project></span>


四、分析Opendaylight工程文件

<?xml version="1.0" encoding="UTF-8"?>

<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>

<!-- 父pom -->

<parent>

<groupId>org.opendaylight.controller</groupId>

<artifactId>commons.parent</artifactId>

<version>1.0.7-SNAPSHOT</version>

<relativePath>opendaylight/commons/parent</relativePath> <!-- 父pom所在目录 相对路径 相对于此pom文件 -->

</parent>

<artifactId>releasepom</artifactId>

<version>0.1.7-SNAPSHOT</version>

<packaging>pom</packaging>

<prerequisites>

<maven>3.0</maven>

</prerequisites>

<!-- 当前工程下面模块 下面每一个module都对应代码中一个目录 -->

<modules>

<module>opendaylight/distribution/opendaylight</module>

<module>opendaylight/forwarding/staticrouting</module>

<module>opendaylight/clustering/services</module>

<module>opendaylight/clustering/services_implementation</module>

<module>opendaylight/clustering/stub</module>

<module>opendaylight/clustering/test</module>

<module>opendaylight/configuration/api</module>

<module>opendaylight/configuration/implementation</module>

<module>opendaylight/routing/dijkstra_implementation</module>

<module>opendaylight/arphandler</module>

<module>opendaylight/forwardingrulesmanager/api</module>

<module>opendaylight/distribution/opendaylight-karaf-resources</module>

<module>features</module>

<!-- archetypes -->

<module>opendaylight/archetypes</module>

</modules>

<scm>

<connection>scm:git:ssh://git.opendaylight.org:29418/controller.git</connection>

<developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>

<tag>HEAD</tag>

<url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:Main</url>

</scm>

<profiles>

<profile>

<id>integrationtests</id>

<activation>

<activeByDefault>false</activeByDefault>

</activation>

</activation>

<modules>

<module>opendaylight/clustering/integrationtest</module>

<module>opendaylight/configuration/integrationtest</module>

<module>opendaylight/forwardingrulesmanager/integrationtest</module>

<module>opendaylight/hosttracker/integrationtest</module>

<module>opendaylight/switchmanager/integrationtest</module>

<module>opendaylight/topologymanager/integrationtest</module>

<!-- Northbound integration tests -->

<module>opendaylight/northbound/integrationtest</module>

<module>opendaylight/statisticsmanager/integrationtest</module>

<module>opendaylight/commons/integrationtest</module>

<module>opendaylight/containermanager/it.implementation</module>

<module>opendaylight/distribution/sanitytest/</module>

</modules>

</profile>

<profile>

<id>docs</id>

<activation>

<activeByDefault>false</activeByDefault>

</activation>

<modules>

<module>opendaylight/northbound/java-client</module>

<module>opendaylight/northbound/swagger-ui</module>

</modules>

</profile>

</profiles>

</project>

我对maven的了解也只是皮毛而已,这里只是做一个简单备份与心得。 日后或对maven有更深入的了解,会在修改笨博客。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: