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

项目管理利器——maven

难度初级
时长 2小时 1分
学习人数
综合评分9.60
486人评价 查看评价
9.8 内容实用
9.6 简洁易懂
9.4 逻辑清晰
  • 中央仓库地址:http://search.maven.org 国内镜像:http://maven.net.cn/content/groups/public 一旦配置了镜像,原来的配置都会失效
    查看全部
  • <scopre>范围 compile : 默认的范围,编译测试运行都有效 provided: 编译,运行时有效 runtime : 在测试和运行时有效 import: 导入的范围,它只使用在dependencyManagement中,表示从其他的pom中导出dependecy的配置 test: 只在测试时有效 system:与本机系统相关联,可移植性差
    查看全部
    2 采集 收起 来源:maven依赖范围

    2018-03-22

  • 一、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依赖传递

    举例:古惑仔电影中,山鸡和南哥混,南哥和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://img1.sycdn.imooc.com//5d0899e300012ec504060110.jpg

    https://img1.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://img1.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


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

    2019-06-18

  • 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://img1.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

    查看全部
  • <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.0http://maven.apache.org/maven-v4_0_0.xsd">
       <!--父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。 坐标包括group ID,artifact ID和
           version。 -->
       <parent>
           <!--被继承的父项目的构件标识符 -->
           <artifactId />
           <!--被继承的父项目的全球唯一标识符 -->
           <groupId />
           <!--被继承的父项目的版本 -->
           <version />
           <!-- 父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项
               目的pom,其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。 -->
           <relativePath />
       </parent>
       <!--声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性。 -->
       <modelVersion>4.0.0</modelVersion>
       <!--项目的全球唯一标识符,通常使用全限定的包名区分该项目和其他项目。并且构建时生成的路径也是由此生成, 如com.mycompany.app生成的相对路径为:/com/mycompany/app -->
       <groupId>asia.banseon</groupId>
       <!-- 构件的标识符,它和group ID一起唯一标识一个构件。换句话说,你不能有两个不同的项目拥有同样的artifact ID和groupID;在某个
           特定的group ID下,artifact ID也必须是唯一的。构件是项目产生的或使用的一个东西,Maven为项目产生的构件包括:JARs,源 码,二进制发布和WARs等。 -->
       <artifactId>banseon-maven2</artifactId>
       <!--项目产生的构件类型,例如jar、war、ear、pom。插件可以创建他们自己的构件类型,所以前面列的不是全部构件类型 -->
       <packaging>jar</packaging>
       <!--项目当前版本,格式为:主版本.次版本.增量版本-限定版本号 -->
       <version>1.0-SNAPSHOT</version>
       <!--项目的名称, Maven产生的文档用 -->
       <name>banseon-maven</name>
       <!--项目主页的URL, Maven产生的文档用 -->
       <url>http://www.baidu.com/banseon</url>
       <!-- 项目的详细描述, Maven 产生的文档用。 当这个元素能够用HTML格式描述时(例如,CDATA中的文本会被解析器忽略,就可以包含HTML标
           签), 不鼓励使用纯文本描述。如果你需要修改产生的web站点的索引页面,你应该修改你自己的索引页文件,而不是调整这里的文档。 -->
       <description>A maven project to study maven.</description>
       <!--描述了这个项目构建环境中的前提条件。 -->
    <!--描述项目所属组织的各种属性。Maven产生的文档用 -->
        <organization>
            <!--组织的全名 -->
            <name>demo</name>
            <!--组织主页的URL -->
            <url>http://www.baidu.com/banseon</url>
        </organization>
    <!--该元素描述了项目相关的所有依赖。 这些依赖组成了项目构建过程中的一个个环节。它们自动从项目定义的仓库中下载。要获取更多信息,请看项目依赖机制。 -->
       <dependencies>
           <dependency>
               <!--依赖的group ID -->
               <groupId>org.apache.maven</groupId>
               <!--依赖的artifact ID -->
               <artifactId>maven-artifact</artifactId>
               <!--依赖的版本号。 在Maven 2里, 也可以配置成版本号的范围。 -->
               <version>3.8.1</version>
               <!-- 依赖类型,默认类型是jar。它通常表示依赖的文件的扩展名,但也有例外。一个类型可以被映射成另外一个扩展名或分类器。类型经常和使用的打包方式对应,
                   尽管这也有例外。一些类型的例子:jar,war,ejb-client和test-jar。如果设置extensions为 true,就可以在 plugin里定义新的类型。所以前面的类型的例子不完整。 -->
               <type>jar</type>
               <!-- 依赖的分类器。分类器可以区分属于同一个POM,但不同构建方式的构件。分类器名被附加到文件名的版本号后面。例如,如果你想要构建两个单独的构件成
                   JAR,一个使用Java 1.4编译器,另一个使用Java 6编译器,你就可以使用分类器来生成两个单独的JAR构件。 -->
               <classifier></classifier>
               <!--依赖范围。在项目发布过程中,帮助决定哪些构件被包括进来。欲知详情请参考依赖机制。 - compile :默认范围,用于编译 - provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath
                   - runtime: 在执行时需要使用 - test: 用于test任务时使用 - system: 需要外在提供相应的元素。通过systemPath来取得
                   - systemPath: 仅用于范围为system。提供相应的路径 - optional: 当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用 -->
               <scope>test</scope>
               <!--仅供system范围使用。注意,不鼓励使用这个元素,并且在新的版本中该元素可能被覆盖掉。该元素为依赖规定了文件系统上的路径。需要绝对路径而不是相对路径。推荐使用属性匹配绝对路径,例如${java.home}。 -->
               <systemPath></systemPath>
               <!--当计算传递依赖时, 从依赖构件列表里,列出被排除的依赖构件集。即告诉maven你只依赖指定的项目,不依赖项目的依赖。此元素主要用于解决版本冲突问题 -->
               <exclusions>
                   <exclusion>
                       <artifactId>spring-core</artifactId>
                       <groupId>org.springframework</groupId>
                   </exclusion>
               </exclusions>
               <!--可选依赖,如果你在项目B中把C依赖声明为可选,你就需要在依赖于B的项目(例如项目A)中显式的引用对C的依赖。可选依赖阻断依赖的传递性。 -->
               <optional>true</optional>
           </dependency>
       </dependencies>
           <!-- 继承自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖(必须描述group ID和 artifact 
            ID信息),如果group ID和artifact ID以外的一些信息没有描述,则通过group ID和artifact ID 匹配到这里的依赖,并使用这里的依赖信息。 -->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    ......
                </dependency>
            </dependencies>
        </dependencyManagement>
    </project>


    查看全部
  • maven自动创建目录骨架:两种方式

    1. 交互式:mvn archetype:generate -> groupId -> artifactId -> version -> package

    2. 一站式:mvn archetype:generate -DgroupId=com.imooc.maven -DartifactId=maven-demo -Dversion=1.0.0SNAPSHOT -Dpackage=com.imooc.maven.demo

    查看全部
  • 常见的构建命令

    mvn -v:查看maven版本

    mvn compile:编译项目

    mvn test:运行测试

    mvn package:打包

    mvn clean:删除target

    mvn install:安装jar包到本地仓库

    查看全部
  • www.mvnrepository.com

    查看全部
  • 依赖传递是指A依赖B B依赖C 那么A间接依赖C。

    创建三个Maven工程,并且在B中引用C的坐标,A中引用B的坐标。

    注意:必须先对C和B进行编译打包同步到本地仓库,否则添加依赖的时候找不到相应的包。

    如果不想在A中让B依赖C,那么则在A项目中,加入exclusions exclusion标签,加入C的坐标,排除依赖。

    修改Maven的JRE版本,需要从网上查找加入到setting.xml 文件的profiles标签中。在建立新的maven工程则JRE一致了。

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

    2018-08-27

  • Maven 生命周期 : 清理项目 构建项目 发布站点

    清理项目:clean 分为3个阶段,pre-clean 清理前 clean 清理 post-clean清理之后

    构建项目: compile 编译 test 测试 package打包

    发布站点:pre-site发布站点前 site 发布站点 post-site发布站点后

    在Maven官网有其相应的插件,对应了相应生命周期的操作。

    在pom文件中引入插件,build下的plugins 创建单个plugin

    输入相应的坐标(groupId artifactid version),如果需要绑定到相应的生命周期过程的时候,则需要加入executions 加入单个 execution 

    加入标签 phase 表示是在哪个生命周期期间运行此插件,加入goals

    写入单个goal,表示插件的类别。格式如下:

    <build>

       <plugins>

          <plugin>

             <groupId></groupId>

              <artifactId></artifactId>

              <version></version>

            <executions>

                  <execution>

                        <phase></phase>

                        <goals>

                           <goal></goal>

                        </goals>

                  </execution>

            

            </executions>

          </plugin>

          

       </plugins> 

    </build>



    查看全部
  • mvn -v 查看Maven版本号

    mvn -complie 编译

    mvn -test 运行测试代码

    mvn package 项目打包成jar

    mvn clean 清除编译文件

    mvn install 将依赖添加到仓库中

    查看全部
  • Maven常用构建命令

    mvn -v 查看Maven版本

    mvn complie 只是编译

    mvn test 通过Maven执行单元测试

    mvn package 通过Maven进行打包(将项目转为jar)

    mvn clean 将Maven生成的taget文件夹下文件全部清理

    mvn install 通过Maven将项目打包并发送到本地仓库中


    查看全部
  • <groupId>项目的包名</groupId>     

    <artifactId>模块名</artifactId>        // 建议使用项目名


    查看全部

  • <group></group>
    <artifactId></artifactId>
    <!--第一个0表示大版本号
        第二个0表示分支版本号
        第三个0表示小版本号
        0.0.1
        snapshot快照
        alpha   内部测试
        beta    公测
        Release 稳定
        GA      正式发布
     -->
     <version></version>
     <!--
     打包方式,默认是jar包
     也可以打包成war、zip、pom格式
     -->
     <package></package>
     
     
     <!-- 项目描述名-->
     <name></name>
     <!-- 项目地址-->
     <url></url>
     <!-- 项目描述-->
     <description></description>
     <!--开发人员列表-->
     <developers></developers>
     <!--许可证信息>
     <licenses></licenses>
     
     <-- 依赖列表-->
         <dependencies>
             <dependency>
                   <group></group>
                <artifactId></artifactId>
                <version></version>
                <type></type>
                <!--依赖范围 -->
                <scope></scope>
                <!-- 设置依赖是否可选-->
                <optional></optional>
                <!-- 排除依赖传递列表-->
                <exlusions>
                    <exclusion>
                    <exclusion>
                </exlusions>
             </dependency>
         </dependencies>
         <!--依赖的管理-->
         <dependencyManagement>
             <!--定义在父模块中,用以继承 -->
             <dependencies></dependencies>
         </dependencyManagement>
         
         <dependencyManagement>
             <!--插件列表 -->
             <build>
                 <plugins>
                     <plugin>
                         <group></group>
                              <artifactId></artifactId>
                              <version></version>
                     </plugin>
                 </plugins>
             </build>
             <!--子模块中对父模块pom的继承-->
             <parent></parent>
             <!--可用以指定多个模块一起编译-->
             <modules>
                 <module></module>
             </modules>
         </dependencyManagement>


    查看全部

举报

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

微信扫码,参与3人拼团

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

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