视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Maven学习笔记
2025-09-30 23:24:47 责编:小OO
文档
Maven学习笔记

1.Maven安装

1.1下载

从apache的站点下载:

http://maven.apache.org/download.cgi

本文使用的3.1.1的maven

1.2解压修改

把下载的文件进行解压,之后修改如下文件

apache-maven-3.1.1\\conf\\setting.xml

因为默认的本地仓库是user.home下,所以修改为本地的路径

并创建相应路径的仓库文件夹,即G:\\MavenStudio\\repository,并在其同级目录下copy一份setting.xml的文件

1.3添加环境变量

在path变量末尾增加apache-maven-3.1.1\bin;路径

1.4测试安装效果

Cmd-mvn –V,如下图

2.Nexus安装

2.1下载

下载站点:http://www.sonatype.org/nexus/go

从如下站点下载Nexus

本文使用的是2.9.0的版本

2.2修改

修改如下路径文件

nexus\\nexus-2.9.0-04-bundle\\nexus-2.9.0-04\\bin\\jsw\\conf\ wrapper.conf

修改如下

把路径改为本地jdk的java路径

2.3环境变量

把环境变量添加到path中

nexus\\nexus-2.9.0-04-bundle\\nexus-2.9.0-04\\bin

2.4启动

注册服务

启动服务

2.5打开

打开nexus连接

http://localhost:8081/nexus

3.Nexus使用

3.1登陆

要管理Nexus,你首先需要以管理员身份登陆,点击界面右上角的login,输入默认的登录名和密码:admin/admin123,登陆成功后,你会看到左边的导航栏增加了很多内容:

这里,可以管理仓库,配置Nexus系统,管理任务,管理用户,角色,权限,查看系统的RSS源,管理及查看系统日志,等等。你会看到Nexus的功能十分丰富和强大,本文,笔者只介绍一些最基本的管理和操作。

 

3.2代理Maven仓库

点击左边导航栏的Repositories,界面的主面板会显示所有一个所有仓库及仓库组的列表,你会看到它们的Type字段的值有group,hosted,proxy,virtual。这里我们不关心virtual,只介绍下另外三种类型:

∙hosted,本地仓库,通常我们会部署自己的构件到这一类型的仓库。

∙proxy,代理仓库,它们被用来代理远程的公共仓库,如maven仓库。

∙group,仓库组,用来合并多个hosted/proxy仓库,通常我们配置maven依赖仓库组。

由此我们知道,我们需要配置一个Maven仓库的proxy,其实Nexus已经内置了Maven Central,但我们需要做一些配置。点击仓库列表中的Maven Central,你会注意到它的Policy是release,这说明它不会代理远程仓库的snapshot构件,这是有原因的,远程仓库的snapshot版本构件不稳定且不受你控制,使用这样的构件含有潜在的风险。然后我们发现主面板下方有三个Tab,分别为Browse,Configuration和Mirrors,我们点击Configuration进行配置,你现在需要关心的是两个配置项:“Remote Storage Location”为远程仓库的地址,对于Maven Central来说是http://repo1.maven.org/maven2/;“Download Remote Indexes”顾名思义是指是否下载远程索引文件,Maven Central的该字段默认为False,这是为了防止大量Nexus无意识的去消耗仓库的带宽(仓库有大量的构件,其索引文件也很大)。这里我们需要将其设置为True,然后点击Save。在Nexus下载的仓库索引文件之后,我们就可以在本地搜索仓库的所有构件。下图展示了我们刚才所涉及的配置:

 

3.3添加一个代理仓库

这里我们再举一个例子,我们想要代理Sonatype的公共仓库,其地址为:http://repository.sonatype.org/content/groups/public/。步骤如下,在Repositories面板的上方,点击Add,然后选择Proxy Repository,在下方的配置部分,我们填写如下的信息:Repository ID - sonatype;Repository Name - Sonatype Repository;Remote Storage Location - http://repository.sonatype.org/content/groups/public/。其余的保持默认值,需要注意的是Repository Policy,我们不想代理snapshot构件,原因前面已经描述。然后点击Save。配置页面如下:

 

3.4管理本地Maven仓库

Nexus预定义了3个本地仓库,分别为Releases,Snapshots,和3rd Party。这三个仓库都有各自明确的目的。Releases用于部署我们自己的release构件,Snapshots用于部署我们自己的snapshot构件,而3rd Party用于部署第三方构件,有些构件如Oracle的JDBC驱动,我们不能从公共仓库下载到,我们就需要将其部署到自己的仓库中。

当然你也可以创建自己的本地仓库,步骤和创建代理仓库类似,点击Repository面板上方的Add按钮,然后选择Hosted Repository,然后在下方的配置面板中输入id和name,注意这里我们不再需要填写远程仓库地址,Repository Type则为不可修改的hosted,而关于Repository Policy,你可以根据自己的需要选择Release或者Snapshot,如图:

 

3.5管理Maven仓库组

Nexus中仓库组的概念是Maven没有的,在Maven看来,不管你是hosted也好,proxy也好,或者group也好,对我都是一样的,我只管根据groupId,artifactId,version等信息向你要构件。为了方便Maven的配置,Nexus能够将多个仓库,hosted或者proxy合并成一个group,这样,Maven只需要依赖于一个group,便能使用所有该group包含的仓库的内容。

Nexus预定义了“Public Repositories”和“Public Snapshot Repositories”两个仓库组,前者默认合并所有预定义的Release仓库,后者默认合并所有预定义的Snapshot仓库。我们在本文前面的部分创建了一个名为“Sonatype Repository”的仓库,现在将其合并到“Public Repositories”中。

点击仓库列表中的“Public Repositories”,然后选择下方的"Configuration" Tab,在配置面板中,将右边“Avaiable Repositories”中的“Sonatype Repository”拖拽到左边的“Ordered Group Repository”中,如图:

创建仓库组和创建proxy及hosted仓库类似,这里不再赘述。需要注意的是format字段需要填写“maven2”,添加你感兴趣的仓库即可。

4.Maven集成Nexus

默认情况下,Maven依赖于仓库,这是为了能让Maven开箱即用,但仅仅这么做明显是错误的,这会造成大量的时间及带宽的浪费。既然文章的前面已经介绍了如何安装和配置Nexus,现在我们就要配置Maven来使用本地的Nexus,以节省时间和带宽资源。

我们可以将Repository配置到POM中,但一般来说这不是很好的做法,原因很简单,你需要为所有的Maven项目重复该配置。因此,这里我将Repository的配置放到G:/MavenStudio/repository/settings.xml中:

Xml代码  

1.  

2....  

3.  

4.    

5.    dev  

6.      

7.        

8.        local-nexus  

9.        http://127.0.0.1:8080/nexus/content/groups/public/  

10.          

11.          true  

12.          

13.          

14.          true  

15.          

16.        

17.      

18.    

19.  

20.  

21.  dev  

22.  

23....  

24.  

由于我们不能直接在settings.xml中插入元素,这里我们编写了一个profile,并添加了一个profile并使用元素自动将这个profile激活。这里的local-nexus仓库指向了刚才我们配置的Nexus中“Public Repositories”仓库组,也就是说,所有该仓库组包含的仓库都能供我们使用。此外,我们通过元素激活了Maven对于仓库所有类型构件下载的支持,当然你也可以调节该配置,比如说禁止Maven从Nexus下载snapshot构件。

使用该配置,Maven就会从你的Nexus服务器下载构件了,速度和从Central下载可不是一个数量级的。

5.部署构建到Nexus

5.1UI界面上传

有时候有个jar文件你无法从公共Maven仓库找到,但是你能从其它得到这个jar文件(甚至是POM),那么你完全可以将这个文件部署到Nexus中,使其成为标准流程的一部分。步骤如下:

点击左边导航栏的"Repository",在右边的仓库列表中选择一个仓库,如“3rd Party”,然后会看到页面下方有四个tab,选择最后一个“Upload”,你会看到构件上传界面。选择你要上传的构件,并指定POM,(或者手工编写GAV等信息),最后点击Upload,该构件就直接被部署到了Nexus的"3rd Party"仓库中。如图:

5.2 Maven部署

更常见的用例是:团队在开发一个项目的各个模块,为了让自己开发的模块能够快速让其他人使用,你会想要将snapshot版本的构件部署到Maven仓库中,其他人只需要在POM添加一个对于你开发模块的依赖,就能随时拿到最新的snapshot。

以下的pom.xml配置和settings.xml能让你通过Maven自动化部署构件:

pom.xml

Xml代码  

1.  

2....  

3.  

4.    

5.    nexus-releases  

6.      Nexus Release Repository  

7.      http://127.0.0.1:8080/nexus/content/repositories/releases/  

8.    

9.    

10.    nexus-snapshots  

11.    Nexus Snapshot Repository  

12.    http://127.0.0.1:8080/nexus/content/repositories/snapshots/  

13.    

14.  

15....  

16.  

settings.xml

Xml代码  

1.  

2....  

3.  

4.    

5.    nexus-releases  

6.    admin  

7.    admin123  

8.    

9.    

10.    nexus-snapshots  

11.    admin  

12.    admin123  

13.      

14.  

15....  

16.  

这里我们配置所有的snapshot版本构件部署到Nexus的Snapshots仓库中, 所有的release构件部署到Nexus的Releases仓库中。由于部署需要登陆,因为我们在settings.xml中配置对应Repository id的用户名和密码。

然后,在项目目录中执行mvn deploy ,你会看到maven将项目构件部署到Nexus中,浏览Nexus对应的仓库,就可以看到刚才部署的构件。当其他人构建其项目时,Maven就会从Nexus寻找依赖并下载。

6.构建web项目

Eclipse 需要安装maven插件。url:maven - http://download.eclipse.org/technology/m2e/releases 。安装maven-3.0.4。并且选择本地的maven,如下图:

 

6.1构建工程

  1.用maven插件构建项目框架

  maven具有强大构建功能,使用maven可以构建多种不同类型的工程。这里我们构建maven-archetype-webapp类型的项目。在Eclipse->New中选择other,找到maven Project型。如下图:

  

在选完路径之后,我们选择构建类型,如下图:

  

接下来,填写工程的Group Id,Artifact Id,如下图:

  

这里的Group Id就是大项目的id,Arifact Id就是该项目的Id。就像一个大项目中有许多小项目组成一样。此时,我们的项目已经成型了,样子如下图:

  

接下来,我们要完善项目的目录,配置。

 

  2.完善项目

  首先,完善目录,增加重要的source Folder,这个不是简单的Floder,这些文件夹是会参与编译的。增加src/main/java,src/test/resources,src/test/java目录。让目录变成标准的maven结构。如下图:

  

接下来,改变一些配置:

让工程的JDK用本地的jdk;

让工程的字符集为UTF-8;

改变工程的目录顺序;

  这些都完成之后,工程目录应该是如下的样子:

  

  

  3.将工程变成web工程

  此时,我们的工程还不是标准的web工程,可以在eclipse中增加web工程的特性,选择工程的Properties,选Project Facets,如下图:

  

这里,我们选择Dynamic Web Module,版本选择2.4,这个版本比较通用。如下图:

  

此时,我们看到目录中多了一个WebContent目录,由于使用maven构建,web目录是src/main/webapp,所以我们删除WebContent目录。接下来,要配置web项目的发布目录,就是Deployment Assembly,如图:

  

6.2发布设置

test目录不要发布,WebContent目录没有了,所以这三项都删掉。并且增加src/main/webapp目录,和Maven Dependenices,完成之后如下图:

  

于是,我们的工程就完全是一个web工程了。

 

  4.赋予工程的springmvc特性

  配置web.xml,使其具有springmvc特性,主要配置两处,一个是ContextLoaderListener,一个是DispatcherServlet。代码如下:  

web.xml

  配置ContextLoaderListener表示,该工程要以spring的方式启动。启动时会默认在/WEB-INF目录下查找applicationContext.xml作为spring容器的配置文件,这里可以初始化一些bean,如DataSource。我们这里什么也不做。代码如下:

applicationContext.xml

  配置DispatcherServlet表示,该工程将采用springmvc的方式。启动时也会默认在/WEB-INF目录下查找XXX-servlet.xml作为配置文件,XXX就是DispatcherServlet的名字,该文件中将配置两项重要的mvc特性:

HandlerMapping,负责为DispatcherServlet这个前端控制器的请求查找Controller;

ViewResolver,负责为DispatcherServlet查找ModelAndView的视图解析器。

代码如下:

exam-servlet.xml

 

  5.让maven自动配置jar包

  在用maven生成框架时,就生成了pop.xml,这就是maven的配置文件。我们要引入spring-web,servlet等特性的包。代码如下:

pop.xml

  maven就是这么简单,一旦保存,maven就会自动下载pop.xml的jar包。此时可以看到目录中Maven Dependencies下生成了jar包。

  更多的jar包可以在maven中心库下载:http://mvnrepository.com。

  

  6.做个测试

  说了一大堆,只有运行起来才有意思,下面写个简单的测试。先写Controller。编写两个类,LoginControler.java,LoginForm.java。代码如下:

LoginController.java

LoginForm.java

  再增加一些jsp,首页的index.jsp,主要是做跳转,代码如下:

index.jsp

   还有两个jsp,做些简单的功能,一个表单login.jsp,一个表单提交的返回index.jsp,代码如下:

login.jsp

index.jsp

  整个项目的目录结构如下:

  

  在tomcat中运行,即可。不要使用Tomcat插件,可能有问题。就用普通的方式。运行效果如下图:

  

7.常见问题

7.1Myeclipse中修改maven配置

从eclipse中增加了maven2的插件之后,maven默认的本地库的路径是${user}/.m2/repository/下,如果修改 

操作步骤

1、手动创建本地仓库的地址为:d:/m2/repository

2、从windows的环境变量中增加了:M2_REPO=d:/m2/repository,同时把这个变量增加到path变量中。

3、修改d:/maven/conf/setting.xml文件,在节点下新增一行:

代码:

d:/m2/repository

表示本地仓库的地址为:d:/m2/repository。

4、从myeclipse->preferences->maven->installations下add一个已经安装到d盘的 maven,如:d:/maven,并勾选此新加项。并点击下面的browse按钮打开maven的全局配置文件,如:d:/maven/conf /setting.xml。

5、从myeclipse->preferences->maven->installations下修改user setting 选项为:D:/m2/repository/settings.xml,并点击update settings。并点击下面的reindex按钮更新索引。

6、点击配置窗口的apply按钮,突出配置窗口。

7、配置修改后,myeclise会自动更新索引,当完成后重启myeclipse,myeclipse->preferences->java->build path->classpath variables中查找M2_REPO这个变量,会发现M2_REPO变量的值变成了d:/m2/repository。自此,maven从远程库下载的jar包都会放到d:/m2/repository下。

7.2修改pom的package方式报错

Maven4MyEclipseUpdate Project下载本文

显示全文
专题