【Maven】概念与应用

Maven入门教程

一 介绍环境

Maven 是一个采用采用纯java编写的项目管理工具,maven采用了一种被称之为Project Object Model(POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中,通过该文件Maven可以管理项目的整个生命周期,包括清除.编译.测试.报告.打包.部署等等。

目前Apache下绝大多数项目都已经采用了Maven进行管理,而maven本身又支持多种插件,可以方便灵活的控制项目,作为开发人员的我们更应该的是关注商业逻辑,而不是把时间浪费在不同环境中去依赖jar包部署等。Maven把我们从中解脱出来了。

说明:

maven根据pom.xml文件,把它转化成项目对象模型(POM),这个时候要解析依赖关系,然后去相对应的maven库中查找到依赖的jar包。

在clean,compile,test,package等阶段都有相应的Plug-in来做这些事情。

而这些plug-in会产生一些中间产物。

本地仓库

~/.m2/repository/

       每一个用户也可以拥有一个本地仓库

远程仓库

中央仓库:Maven默认的远程仓库http://repo1.maven.org/maven2

私服:是一种特殊的远程仓库,它是架设在局域网内的仓库

镜像:用来替代中央仓库,速度一般比中央仓库快

二Maven的作用

(1):jar的声明式依赖管理

(2):项目的自动构建

 

三maven的下载安装与配置eclipse||myeclipse

(1)   下载路径Maven – Download Apache Maven

(2)   假如下载后解压到D盘

(3)   目录介绍

bin:含有mvn运行的脚本

boot:含有plexus-classworlds类加载器框架

conf:含有settings.xml配置文件

       |

       |--settings.xml

       |--toolchains.xml   

lib:含有Maven运行时所需要的java类库

        |

|--各种jar

|--maven-model-builder-3.3.9.jar

       |--pom.xml

整个安装目录下两个重点文件

 *settings.xml可以通过它来配置用户的本地仓库,方便用户在本地添加jar

*pom.xml 工程中的主要依赖配置文件

 

 

 

Settings.xml中的主要配置的地方:

可以通过配置这个位置来配置本地仓库。

配置私服的路径

 

直接连接互联网

如果不想连接私服,可以直接连接互联网。只需要把连接私服的所有的路径去掉即可。

通过在setting中对配置文件进行配置,我们就可以通过不同的途径去访问jar包,指导我们的整个项目的进展。

配置环境变量(配置之前,必须确定配置了JDK环境变量)

MAVEN_HOME : D:\apache-maven-3.0.2
把此命令添加到Path中: %MAVEN_HOME%\bin\

l  配置用户范围的settings.xml

MAVEN_HOME/conf/settings.xml 全局的

l  验证安装是否成功

在命令行上输入: mvn-version;回车, 如看到下面信息表示安装成功

(4)   关联eclipse或myeclipse

 

如图所示,windowsàpreferenceàmyeclipse自带maven,从上图看以看到MavenJDK是可以配置的,这里用了jdk1.6

  从上图可以看出,我们可以利用myeclipse自带的maven,也可以使用自己的maven。

上图应用的就是自己的maven。

  从最下面可以看出,这是settings.xml文件的路径。

 

这幅图说明了用户的settings.xml文件的位置和用户的仓库的位置。

这是最基本的环境的配置。

四:创建maven项目

1 maven约定(可更改)

src/main/java      存放项目的java文件

src/main/resources  存放项目的资源文件,如spring,hibernate的配置文件

              src/test/java       存放所有的测试的java文件

src/test/resources   存放测试用的资源文件

target            项目输出位置

pom.xml  文件

2创建maven工程

1创建java project

选择Maven Project

 

选择快速创建maven-archetype-quickstart

填写group ID,Artiface Id,Version,Package属性

然后点击finish就可以了。

2创建web project

 

新创建一个web project

添加maven support即可。

生成的项目

创建一个包cn.itcast.maven,并在该包下创建一个类

编写Hello类

在src/test/java中创建一个包cn.itcast.maven,创建一个测试类HelloTest

编写测试类

编辑pom.xml文件

      

说明:

project:表示一个工程

modelVersion:为版本号

用maven命令编译项目(mvn compile)

 

在命令行出现这样的形式,说明编译OK了。

target文件夹的变化

可以看到编译后的文件全部放入到了target里。

clean

执行命令mvn clean

      

说明执行成功了。

 

可以看到target的目录没有了。

test

执行mvn test命令

      

说明执行成功了,并且运行了一个类,再次看target的结构

 

 说明:

     target/classes

          存放编译后的类

     target/test-classes

          存放编译后的测试类

     target/surefire-reports

          存放测试报告

可以看出,只要进行测试,清理和编译可以自动执行了。

package

执行mvn install

      

 这个界面说明打包成功了。

 

       说明:

              target/classes

            编译后的类的路径

       target/test-classes

            编译后的测试类的路径

       target/surefire-reports

            测试报告

       target/maven-archiver

            执行package的归档

       Hello-0.0.1-SNAPSHOT.jar

                      执行完package命令后打成的jar包

Hellofriend项目

建立HelloFriend项目工程

编写pom.xml文件

执行mvn compile命令

执行这个命令的时候会出错,因为HelloFriend项目是建立在Hello项目基础之上的,但是现在工程中没有引入Hello.java这个类。所以会出错。

执行mvn cleaninstall命令

打开命令行

把当前路径调节到Hello工程的根目录

执行mvn clean install命令,把Hello整个工程放入到仓库中

 

如果执行成功,则会在仓库中看到。

 

在仓库中的位置。

执行mvn package命令打包HelloFriend工程

说明成功了。

 

可以看到成功以后,在target目录下多了一个jar包

该jar包为当前工程的jar包。

建立cn.itcast.maven包及HelloFriend类

编辑HelloFriend类

建立cn.itcast.maven包和测试类HelloFriendTest类

编辑HelloFriendTest类

执行mvn package命令

 

上图中的”say hello”就是输出的结果。

五:非约定路径与私服nenuxs:

<!-- 用来定义构建阶段的标签 -->

  <build>

    <!-- 由于采用的非Maven的约定,则在构建的时候要指定的目录 -->

    <sourceDirectory>${basedir}/src</sourceDirectory>

   <outputDirectory>${basedir}/WebRoot/WEB-INF/classes</outputDirectory>

    <resources>

      <!-- 资源文件也存放到src中但排除 *.java -->

      <resource>

        <directory>${basedir}/src</directory>

        <excludes>

          <exclude>**/*.java</exclude>

        </excludes>

      </resource>

    </resources>

  </build>

 

Maven私服

中央仓库注意事项

地址: 目前来说:http://repo1.maven.org/maven2/是真正的Maven中央仓库的地址,该地址内置在Maven的源码中其他的都是镜像

索引: 中央仓库带有索引文件以方便用户对其进行搜索,完整的索引文件大小约为60M,索引每周更新一次

黑名单: 如果某个IP地址恶意的下载中央仓库内容,例如全公司100台机器使用同一个IP反复下载,这个IP(甚至是IP段)会进入黑名单,因此稍有规模的使用Maven时,应该用

 

内置属性:主要有两个常用内置属性——${basedir}表示项目根目录,即包含pom.xml文件的目录;${version}表示项目版本。POM属性:pom中对应元素的值。例如${project.artifactId}对应了<project><artifactId>元素的值,常用的POM属性包括:                                      ${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java/.                                                                                                              ${project.build.testSourceDirectory}:项目的测试源码目录,默认为/src/test/java/.                                                                                                      ${project.build.directory}:项目构建输出目录,默认为target/.                                                                                                                                      ${project.outputDirectory}:项目主代码编译输出目录,默认为target/classes/.                                                                                                            ${project.testOutputDirectory}:项目测试代码编译输出目录,默认为target/testclasses/.                                                                                            ${project.groupId}:项目的groupId.                                                                                                                                                                              ${project.artifactId}:项目的artifactId.                                                                                                                                                                            ${project.version}:项目的version,于${version}等价                                                                                                                                                      ${project.build.finalName}:项目打包输出文件的名称,默认为${project.artifactId}${project.version}.

自定义属性:在pom中<properties>元素下自定义的Maven属性。

  • [html] view plaincopy

    1. <project>  
    2.     <properties>  
    3.         <my.prop>hello</my.prop>  
    4.     </properties>  
    5. </project>  
  • Settings属性:与POM属性同理。如${settings.localRepository}指向用户本地仓库的地址。
  • Java系统属性:所有Java系统属性都可以使用Maven属性引用,例如${user.home}指向了用户目录。可以通过命令行mvn help:system查看所有的Java系统属性
  • 环境变量属性:所有环境变量都可以使用以env.开头的Maven属性引用。例如${env.JAVA_HOME}指代了JAVA_HOME环境变量的值。也可以通过命令行mvn help:system查看所有环境变量。

Nexus架设私服

为什么需要私服

       公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上,这样的话就可以通过这台搭建了nexus私服的电脑访问maven的远程仓库

 

Nexus环境搭建

第一步:下载nexus-webapp-1.9.2.4.war包,然后拷贝到tomcat下的webapps目录中

第二步:启动tomcat 默认登录账户密码为: admin admin123 

第三步:访问http://localhost:8080/项目名称/

认识repository

Nexus仓库的默认的地址,nexus-2.1.2\WEB-INF\plexus.properties中定义的

在Views/Repositories-->Repositories里进行配置, nexus里可以配置3种类型的仓库,分别是proxy、hosted、group

proxy:是远程仓库的代理。比如说在nexus中配置了一个central repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户,相当于起到一个中转的作用

Hosted是宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里。比如说oracle的驱动程序,ojdbc6.jar,在central repository是获取不到的,就需要手工上传到hosted里

Group是仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了右边那个Repository Path可以点击进去.

virtual也是中央仓库镜像,支持M1老版本

每个仓库的作用

3rd party: 无法从公共仓库获得的第三方发布版本的构件仓库
Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库
Central: 用来代理maven中央仓库中发布版本构件的仓库
Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库
Codehaus Snapshots: 用来代理CodehausMaven 仓库的快照版本构件的仓库
Releases: 用来部署管理内部的发布版本构件的宿主类型仓库
Snapshots:用来部署管理内部的快照版本构件的宿主类型仓库

 

 

Central Repository

最关键的一个配置, 就是Central Repository的proxy配置,因为大部分的构件,都是要通过这个proxy得到的,

配置HostedRepository

一般会配置3个hosted repository, 分别是3rd party、Snapshots、Releases,分别用来保存第三方jar(典型的比如ojdbc6.jar),项目组内部的快照、项目组内部的发布版, 这里并没有什么特别的配置,只是Deployment Policy这个选项,一般Snapshots会配置成允许,而Releases和3rd party会设置为禁止

配置grouprepository

前面说过group其实是一个虚拟的仓库,通过对实体仓库(proxyhosted)进行聚合,对外暴露一个统一的地址这里要注意的是,放到左边的仓库,才是会被聚合的仓库

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值