为了账号安全,请及时绑定邮箱和手机立即绑定

项目管理利器——maven

难度初级
时长 2小时 1分
学习人数
综合评分9.60
486人评价 查看评价
9.8 内容实用
9.6 简洁易懂
9.4 逻辑清晰
  • maven compile 编译

    maven test 测试

    maven package  打包

    maven clean  删除target

    maven install 安装jar包本地仓库

    查看全部
  • maven压缩包下载地址


    查看全部
  • maven下载地址

    查看全部
  • 使用maven构建Web项目(介绍如何使用maven创建web项目,如何安装jetty插件和tomcat插件,并简介如何将项目打包到jetty和tomcat 中,并运行。)

    案例:

    描述:新建maven项目,这里使用webapp的模板(Group Id为org.apache.maven.archetypes,Artifact Id为maven-archetype-webapp),项目的Group Id为com.imooc.webdemo,Artifact Id为webdemo,项目里的index.jsp有×号,是因为没有ServletAPI的原因,所以需要在pom.xml中添加Servlet的依赖,打开浏览器进入maven的中央仓库,(https://mvnrepository.com/)搜索Servlet,点击3.0.1,将Servlet的坐标复制到pom中,为该坐标设置scope为provided,也就是说只在编译时和测试时运行,然后将junit的版本更改为4.10,接下来检查为我们创建的目录是否正确,只为我们创建了资源目录,所以按照maven的约定我们手动创建其他目录,在Java Resource下,只为我们创建了资源目录,按照maven的约定,手动创建其他目录,点击Java Resource选择New——>Source Folder,Project名为maven项目名,Folder name为src/main/java,然后再创建存放测试用例的目录,Folder name为src/test/java,如果无法创建目录,在Navigator视图下src的main下进行创建,再转到Explorer视图,进行更新Maven——>Update Project,这样存放资源文件的目录就显示出来了,接下来需要检查,classes文件的输出路径,项目上右键Build Path——>Configuration Build Path,点击source,如下图二为输出路径,确保它的输出路径为target/classes,接着要把项目转化成Web项目,项目上右键Properties——>Project Facets选上Dynamic Web Module,接下来需要修改部署时的默认配置,项目右键Properties——>Deployment Assembly,里面除了主代码的目录之外,测试目录的代码依旧是在发布时部署上去的,这里要将其删除,因为最终发布产品时,我们并不需要这些测试的文件,这样一个Web项目就创建成功了,访问的网址为:localhost:8080/webdemo/。

    https://img2.sycdn.imooc.com/5d09842a0001acd603040353.jpg

    https://img2.sycdn.imooc.com/5d098980000153b504120607.jpg


    使用package命令将其打包,也就是打成war包,然后将其拷贝到支持的web容器中,项目就可在浏览器中进行访问了,这里使用jetty作为web容器。

    首先在<builder>标签中添加jetty插件,jetty插件去maven的中央仓库中搜索Jetty Maven Plugin,使用的是最新的版本,把该插件的坐标复制到pom的<builder><plugins><plugin>标签中,然后启动一下,Run as——>Maven build,Goals输入jetty:run,如果控制台显示Started Jetty Server表明Jetty容器启动成功了,这样就可以在浏览器访问该项目了,访问http://localhost:8080/出现HelloWorld代表成功,如果想在打包的阶段直接运行jetty插件,可以在Jetty的坐标中添加<executions><execution>指定它的阶段,也就是package阶段运行目标,<phase>package</phase><goals>run</goal></execution></executions>目标为run如图三,在打包成功后使用jetty:run来运行jetty服务,然后右键项目,run as——>Maven build,Goals:输入clean package,访问localhost:8080出现hello world表示成功,如果要使用Tomcat作为容器,需要加入一个Tomcat的插件,进入Tomcat的官网,点击Maven Plugin,找到Version2.2,这里面有个例子,将它的坐标复制到pom中,如图4。

    https://img1.sycdn.imooc.com/5d098cf10001330412300194.jpghttps://img4.sycdn.imooc.com/5d0991c1000166b406270279.jpghttps://img3.sycdn.imooc.com/5d0994500001c82307120615.jpg


    查看全部
  • maven聚合和继承

    maven聚合:如果想在maven中将多个项目进行install,将其安装到本地仓库中,必须对其依次执行install命令,maven中有一种方式可以将其放到一起运行,这种方式称为聚合。

    案例:将山鸡、南哥、B哥聚合到本地仓库中,这里需要新建一个maven项目,依旧使用quickstart模板,Group Id为com.hongxing,Artifact Id为hongxing-aggreation,它作为其他pom的容器,需要修改它的pom的<package>为pom</package>,然后使用<modules><module>B哥的maven项目名</module><module>南哥的maven项目名</module><module>山鸡的maven项目名</module></modules>,然后右键hongxing-aggreation的Maven——>Maven build,Goals输入clean install控制台输出结果为三次构建,第一次生成B哥的jar,并且将其安装到本地仓库中,第二次生成南哥的jar,并且将其安装到本地仓库中,第三次生成山鸡的jar,并且将其安装到本地仓库中。

    https://img4.sycdn.imooc.com/5d08d57400011a5f04630153.jpg继承:三个maven项目中都有一个共同的特点,就是都使用了junit,并且在每个项目的pom.xml中,都对其进行了配置,比如说b哥的maven使用了如下图,这样就出现了很多重复的地方,其实maven中可以想java中一样,将其共同的特性封装成一个父类,所以新建一个maven项目,Group Id为com.hongxing,Artifact Id为hongxing-parent,然后修改它的pom.xml,要将<dependencies>标签放置在<dependencyManagement>标签里,如果使用这个标签对依赖进行管理,它并不会在这个项目中运行,也可以将junit的版本号提取出来,在外面定义一个<properties>属性,并在该属性里通过<junit.version>设置junit的版本号,这样就可以在<dependencies>中的<version>中像使用EL表达式那样来调用它,${junit.version},最后将它的<package>改成pom,然后打开B哥的pom让其继承pom,这里就可以将junit的版本号进行删除,<scope>也可以删除掉,这里要使用到<parent>标签,然后引入我们的parent的maven的坐标,这样junit已经从父类parent,也就是pom中继承过来了。

    https://img4.sycdn.imooc.com/5d08de1d0001f2e406850475.jpg

    src目录依然有报错,其实test目录和main目录,对于parent的pom来说,是没有作用的,可以将其进行删除,然后更新一下它,Maven——>Update Project,这个叉号就消除了。

    https://img4.sycdn.imooc.com/5d08e0b200010cd404780447.jpg


    查看全部
  • maven依赖传递

    举例:古惑仔电影中,山鸡和南哥混,南哥和B哥混,对于山鸡而言就间接和B哥混了,换成程序而言,山鸡依赖南哥,南哥依赖B哥,山鸡就就依赖传递B哥了。

    案例:

    描述:新建3个maven项目,选择quickstart模板,第一个Group Id为com.hongxing,Artifact Id为hongxing-bge,Package为默认的,第二个Group Id为com.hongxing,Artifact Id为hongxing-nange,第三个Group Id为com.hongxing,Artifact Id为hongxing-shanji。

    步骤1:南哥依赖于B哥,南哥的pom.xml中进行配置,引入B哥的依赖,需要知道B哥的坐标,然后编译一下南哥,Maven——>Maven build(在Goals:compile)。


    https://img4.sycdn.imooc.com/5d0899e300012ec504060110.jpg

    https://img4.sycdn.imooc.com/5d0899e30001e97904050114.jpg

    南哥的maven项目首先会到本地仓库中进行查找B哥的jar包,如果本地仓库中没有,则会从远程中央仓库中下载,如果远程中央仓库中没有,则会报错,我们先将B哥进行打包,Maven——>Maven build(Goals:clean package),然后再将B哥安装到本地仓库中Maven——>Maven build(install),它依然会编译,并且会测试一遍,并且安装到指定的仓库中,接下来再对南哥进行编译Maven——>Maven build(clean compile),这样南哥就构建成功了。

    步骤2:山鸡依赖于南哥,首先,要打包南哥的maven项目,并进行安装到本地仓库中Maven——>Maven build(clean install),依旧要找到南哥的坐标,然后编译一下山鸡Maven——>Maven build(compile)


    https://img1.sycdn.imooc.com/5d08c5530001604904180132.jpg

    https://img3.sycdn.imooc.com/5d08c553000118c602410246.jpg


    依赖具有传递性,山鸡的maven项目并没有依赖B哥,B哥的依赖缺自动的加入到了山鸡的依赖目录里。

    排除依赖:依赖南哥的<dependency>标签中添加<exclusions><exclusion>B哥的坐标<exclusions><exclusion>

    举例:山鸡只听从南哥的吩咐,不听其他人的吩咐,将B哥的依赖从山鸡的maven项目依赖中排除,。

    https://img1.sycdn.imooc.com/5d08c7950001d41d03000157.jpg

    产生如下图JRE System Library为J2SE1.5的原因是:maven默认使用jdk1.5,我们可以将其修改,点击JRE System Library的Properties属性,选择JavaSE-1.7(jre7),这样修改比较麻烦每次创建一个项目都需要修改一下,可以修改settings.xml,找到<profiles>大概182行,加入如下图片的代码,指定它默认的jdk为1.7。

    https://img1.sycdn.imooc.com/5d08c8d20001d41d03000157.jpg

    https://img1.sycdn.imooc.com/5d08c9530001a60511490536.jpg


    查看全部
    1 采集 收起 来源:maven依赖传递

    2020-02-27

  • maven依赖范围

    通过junit依赖来讲解依赖的范围<scope>

    https://img4.sycdn.imooc.com/5d084be0000199f903680219.jpg

    我们平时开发时,如果使用某一框架,就要引入相应的jar包到项目的classpath路径中,这样我们的项目就可以使用框架封装好的一些方法。

    maven中提供了三种classpath:

    1、编译

    2、测试

    3、运行

    而我们使用junit依赖范围的值为test,这就表明了junit只存在测试的classpath中,也就是存在测试的范围,所以依赖范围就是控制依赖与三种classpath的关系的。

    具体的scope的属性:查看maven官网(maven.apache.org),查看它的文档,点击Index (category),找到The Dependencies and Dependency Exclusions,找到Dependency Scope,提供了6种scope,分别是

    compile:默认的范围,如果没有指定依赖范围,就会使用此依赖的范围的maven依赖,编译测试运行这三种classpath都有效。

    provided:编译和测试时都有效,最后运行不会被加入(举了一个例子,当我们构建一个JavaEE的Web应用时,可以依赖ServletAPI,但是在最后运行时,并不会被加入,因为Web容器已经包含了这个API,如果再加入就会导致冲突)。

    runtime:在测试和运行时有效,典型的例子就是jdbc驱动的实现,项目的主代码的编译只需要jdk提供的jdbc的API,只有在执行测试或者运行项目的时候才需要实现生成接口的具体jdbc的驱动

    test:只在测试时有效,典型应用就是junit。

    system:和provided一样,编译和测试时有效,与本机系统相关联,可移植性差,比如要引用本机的Java_Home,如果把项目移植到其他系统上,就可能由于路径的不一致,而导致错误。

    import:导入的依赖范围,它只使用在dependencyManagement标签中,表示从其他的pom中继承过来的依赖。

    https://img1.sycdn.imooc.com/5d0856b30001b82e09810642.jpg

    该文档提供了import的例子,将A中的依赖导入到B中。

    https://img1.sycdn.imooc.com/5d0856f700017e1505140677.jpg



    查看全部
    0 采集 收起 来源:maven依赖范围

    2020-02-27

  • maven中Pom.xml解析

    Pom.xml:maven项目的核心管理文件,用于项目描述、组织管理、依赖管理、构建信息的管理,Pom中包含了许多的标签。

    Pom.xml的常用元素:

    <project>是pom.xml的根元素,包含了pom的一些约束信息。

    <modelVersion>是一个固定的版本,也是必须的元素,指定了当前pom的版本。

    坐标的信息由以下标签组成:

    <groupId>主项目的标识,用来定义当前的maven属于哪个实际的项目,和我们为项目创建的包是一样的,是由反写的公司网址+项目名组成</groupId>

    注意:maven的项目和实际的项目不是一一对应关系,maven项目体现的是模块化的概念,因此一个实际项目往往会划分成很多的模块。

    <artifactId>表示一个模块的标识,实际项目中的一个模块,一般会使用项目名+模块名进行标识,比如struts2项目,它下面可能分为struts2demo01、struts2demo02,struts2是项目名,而demo01和demo02是模块名</artifactId>

    <version>标识当前项目的版本号,版本号一般都是由三个数字来组成的,第一个0标识大版本号,第二个0表示分支版本号,第三个0表示小版本号,一般形式可以写为0.0.1snapshot,snapshot为快照的版本,版本除了snapshot,还有内测的测试版本alpha,以及公测版beta,比如在网上玩新出的游戏,经常会有公测不删档,对应的就是该版本,还有Release版本,它是一个稳定的版本,以及GA版本是一个正式的发布版本<version>。

    <packaging>maven项目打包的方式,不指定默认打包是jar,还可以打包成其他类型,比如war、zip、pom等<packaging>

    其他的标签:

    <name>项目的描述名,一般是在产生对象文档时候才会使用</name>

    <url>项目的地址</url>

    <description>项目的描述</description>

    <developers>开发人员的列表,项目发布的时候,可以把开发人员的信息填写进去</developers>

    <licenses>许可证的信息,比如经常用到的开源框架,它都会有一些许可证的信息</licenses>

    <organization>组织信息</organization>

    依赖列表:它是比较重要的,会经常使用到,依赖列表下可以包含多个依赖项,依赖项通过制定它的坐标来确定依赖所在的位置,也就是<groupId><artifactId><version>,还可以指定它的<type>,还可以使用<scope>指定依赖的范围(之前写的junit的测试范围是test,test表示junit,这个构件(junit的jar包),只在测试的依赖范围内有用,比如在主代码中引用junit这个类,它就会报错),<optional>该标签有两个值,分别是true和false,它的作用是设置依赖是否可选,默认是false,子项目默认是false时,子项目默认是继承的,如果为true,子项目必须显示的引入该依赖,<exclusions>是一个排除依赖传递的列表,该标签下可以排除多个依赖通过<exclusion>,作用是:比如Ajar包依赖Bjar包,Bjar包又依赖Cjar包,C对于A来说就是传递依赖,如果A不想依赖C,就可以使用这个标签,比如我们使用的Spirng除了核心的jar包之外,它的jar包还引用其它很多相关的jar包,但对于我们而言只需要使用Spring的jar包,而其他的一些相关的jar包我们并不需要使用。

    https://img1.sycdn.imooc.com/5d0847500001479603270432.jpg

    <dependencyManagement>依赖的管理,也可以通过<dependencies>声明依赖列表,通过<dependency>包含多个依赖,但是它并不会被运行,也就是说它不会被引入到实际的依赖当中,该标签一般主要用于定义在父模块中,供子模块继承用的。比如之前多个maven项目中,都使用到junit,我们就可以抽象出一个父类的模块,然后在父类模块中对junit进行一个定义,其他子模块直接继承该父模块即可。

    https://img1.sycdn.imooc.com/5d0848640001c65203640182.jpg

    <build>通常为我们构建的行为来提供相应的支持,我们经常在这里使用到<plugins>表示插件的列表,在该标签下可以有多个<plugin>标签,(我们之前使用到source插件对项目进行打包),在<plugin>中依旧是要指出插件的坐标通过<groupId><artifactId><version>

    https://img4.sycdn.imooc.com/5d08496c00019cbe04360288.jpg

    <parent>以及<modules>:经常使用到的:<parent>通常用于在子模块中对父模块的pom的一个继承,<modules>用来聚合运行多个maven的项目,如果有很多的maven模块是要编译的话呢,我们之前的办法是一个一个的编译,而使用<modules>就可以指定多个的模块,然后在一起进行编译。

    https://img2.sycdn.imooc.com/5d084a8e00011ae403100180.jpg



    查看全部
  • 一、eclipse中安装maven插件(如果eclipse是4.0以上或者myEclipse就不用安装插件了)

    1、插件放置在eclipse中的dropins文件夹下,并重启eclipse。

    2、Maven需要jdk支持,而eclipse已经添加了jre,根据提示修改eclipse.ini。

    https://img1.sycdn.imooc.com/5cfe386c0001d0cf06380283.jpg

    3、eclipse-ini文件中

    512m下添加-vm

    再在底下添加jdk的bin目录的路径+javaw.exe

    4、修改eclipse默认的jre(eclipse运行在JRE之上,maven使用到了JRE的支持,所以要修改eclipse的JRE,使其可以找到JDK,使用目录中私有的JRE,这样就能完全解决这个问题,默认的JRE没有一些包)

    Preferences——>Java——>Installed JREs——>Add——>我们安装JDK的位置

    Preferneces——>Maven——>Installations——>Add——>我们安装的Maven的位置

    5、修改User Settings(找到settings.xml)

    二、创建Maven项目

    1、目录模板选择maven-archetype-quickstart

    2、运行Maven项目——》右键run as——》Maven Builder——》输入compile点击run即可

    3、Maven打包——》右键run as——》Maven Builder——》package(打包之后在项目根目录中就会有一个target文件夹,该文件夹下就会有该jar包


    查看全部
  • maven中的坐标和仓库

    构件:插件<plugin>+jar包<dependency>

    坐标概念:maven中,任何一个依赖、插件、都可以称为构件,所有构件通过坐标作为其唯一标识。

    建议:创建maven项目时,尽量符合规范<gorupId>(公司域名反写+项目名)和<artifactId>(项目名-模块名),<version>(构建的版本号)这样看起来更清晰,并符合逻辑,也更方便搜索。

    仓库概念:管理项目的构件,仓库分为本地仓库和远程仓库。本地仓库找不到我们的构件,则会去maven的中央仓库查找,查找到后就会下载到本地仓库中,如果远程仓库中也找不到就会报错,maven默认提供了一个中央仓库地址(apache-maven——>lib——>maven-model-builder.license.jar里的pom-4.0.0xml,maven提供的超级pom,所有Maven项目都会继承这个pom)。

    中央仓库地址:基本上平常用的开源框架,这里都会有,它包含了绝大多数的Java开源项目(基本上平常开发常用的开源框架都可以找到)。

    <layout>:表示使用默认布置。

    <snapshots>下<enabled>为false:禁止下载快照的版本构件。

    https://img2.sycdn.imooc.com/5cfe150a0001208705270335.jpg

    镜像仓库:A提供了和B一样的功能,Maven的中央仓库服务器都是位于国外的,有时可能由于一些原因导致无法访问外网,所以国内提供了它的镜像仓库,相对来说,更快、更稳定一些。

    修改镜像仓库的位置:apache-maven——>conf——>setting.xml中mirror,配置了镜像仓库,就不会再访问中央仓库。

    更改仓库位置:maven从远程仓库中下载的构件,默认存放在用户目录中C:\Users\Administrator\.m2\repository,一般不会把仓库放在C盘目录中,如果遇到一些问题这个数据可能就没了,所以一般在<localRepository>标签中放置的是其他盘下的仓库。并且把setting复制一份放到goujian文件夹下,更新maven版本,就不用在重新更改了,直接把这个copy过去即可。

    https://img1.sycdn.imooc.com/5cfe1992000185d410080123.jpg


    查看全部
  • Jdk1.7才能用3
    查看全部
  • maven常用命令2

    查看全部
  • maven 常用命令1

    查看全部
  • path 加入maven变量

    查看全部
  • maven系统变量

    查看全部

举报

0/150
提交
取消
课程须知
学习本门课程前需要具备Java基础和Java Web基础!
老师告诉你能学到什么?
1、maven的基本概念 2、如何快速使用maven来构建项目 3、maven中的核心概念 4、使用maven构建web项目以及如何集成tomcat、jetty插件

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!