maven学习-初窥门径

 更新时间:2017年10月19日 08:41:48   作者:黄小鱼ZZZ  
这篇文章主要介绍了maven的简单知识,介绍了maven的定义及核心功能,具有一定参考价值,大家可以了解下。

最近在一个公司实习,由于刚出校门对公司开发流程还是不太清楚。对Maven知之甚少,最近我就在恶补Maven。

Maven定义

            Maven 是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model), 一组标准集合, 一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。 当你使用 Maven 的时候,你用一个明确定义的项目对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

             在没有自定义的情况下,源代码假定是在 ${basedir}/src/main/java,资源文件假定是在${basedir}/src/main/resources 。测试代码假定是在 ${basedir}/src/test 。项目假定会产生一个 JAR 文件。 Maven 假定你想要把编译好的字节码放到${basedir}/target/classes 并且在 ${basedir}/target 创建一个可分发的 JAR文件。 虽然这看起来无关紧要,但是想想大部分基于 Ant 的构建必须为每个子项目定义这些目录。 Maven 对约定优于配置的应用不仅仅是简单的目录位置, Maven 的核心插件使用了一组通用的约定,以用来编译源代码,打包可分发的构件,生成 web 站点,还有许多其他的过程。
Maven插件的全局性重用

         Maven 的核心,解析一些 XML 文档,管理生命周期与插件。 Maven 被设计成将主要的职责委派给一组 Maven 插件,这些插件可以影响 Maven 生命周期,提供对目标的访问。绝大多数 Maven 的动作发生于 Maven 插件的目标,如编译源码,打包二进制代码,发布站点和其它构建任务。从 Apache 下载的 Maven 不知道如何打包 WAR 文件,也不知道如何运行单元测试, Maven 大部分的智能是由插件实现的,而插件从 Maven 仓库获得。第一次你用全新的 Maven 安装运行诸如 mvn install 命令的时候,它会从中央 Maven 仓库下载大部分核心 Maven 插件。这不仅仅是一个最小化 Maven分发包大小的技巧,这种方式更能让你升级插件以给你项目的构建提高能力。 Maven从远程仓库获取依赖和插件的这一事实允许了构建逻辑的全局性重用。

依赖管理

          由于项目是根据一个包含组标识符,构件标识符和版本的唯一的坐标定义的。项目间可以使用这些坐标来声明依赖
远程仓库

          和项目依赖相关的,我们可以使用定义在项目对象模型( POM)中的坐标来创建 Maven 构件的仓库。

Ant 和 Maven 的区别

Apache Ant

        Ant 没有正式的约定如一个一般项目的目录结构, 你必须明确的告诉 Ant哪里去找源代码,哪里放置输出。随着时间的推移,非正式的约定出现了,但是它们还没有在产品中模式化。

         Ant 是程序化的,你必须明确的告诉 Ant 做什么,什么时候做。你必须告诉它去编译,然后复制,然后压缩。

         Ant 没有生命周期,你必须定义目标和目标之间的依赖。你必须手工为每个目标附上一个任务序列。

Apache Maven

         Maven 拥有约定,因为你遵循了约定,它已经知道你的源代码在哪里。它把字节码放到 target/classes ,然后在 target 生成一个 JAR文件。

       Maven 是声明式的。你需要做的只是创建一个 pom.xml 文件然后将源代码放到默认的目录。 Maven 会帮你处理其它的事情。

        Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是, Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。

Maven 以插件的形式为一些一般的项目任务提供了内置的智能。如果你想要编写运行单元测试,你需要做的只是编写测试然后放到 ${basedir}/src/test/java ,添加一个对于 TestNG 或者 JUnit 的测试范围依赖,然后运行 mvn test 。如果你想要部署一个 web 应用而非 JAR ,你需要做的是改变你的项目类型为 war ,然后把你文档根目录置为 ${basedir}/src/main/webapp 。当然,你可以用 Ant 做这些事情,但是你将需要从零开始写这些指令。使用 Ant ,你首先需要确定 JUnit JAR 文件应该放在哪里,然后你需要创建一个包含这个 JUnit JAR 文件的 classpath ,然后告诉 Ant 它应该从哪里去找测试源代码,编写一个目标来编译测试源代码为字节码,使用 JUnit 来执行单元测试

简单使用语句

          mvn   -v    查看版本
                    compile  编译
                    test   测试
                    package   打包
                    clean   清楚target
                    install  安装jar包到本地仓库中

自动创建目录骨架

archetype插件用于创建符合maven规定的目录骨架创建目录有两种方式

      方式一:archetype:generate 按照提示进行选择
      方式二:archetype:generate -DgroupId=组织名,公司网址的反写+项目名
                                                           -DartifactId=项目名-模块名
                                   -Dversion=版本号
                                   -Dpackage=代码所存在的包名

其他知识点 

     坐标
           构件
      仓库   分为本地仓库和远程仓库
      镜像仓库  
      clean 清理项目
      pre-clean 执行清理前的工作
      clean清理上一次构建生成的所有文件
      post-clean执行清理后的文件
      site生成项目站点
             pre-site 在生成项目站点前要完成的工作
     site 生成项目的站点文档
     post-site在生成项目站点后要完成的工作
     site-deploy发布生成的站点到服务器上
      依赖范围
      依赖冲突
      依赖传递
      聚合和继承,其他知识点以后在详细介绍。。

总结

以上就是本文关于maven学习-初窥门径的全部内容,对maven作了简要介绍,有什么不对的地方欢迎留言指出,小编也可以学习学习。感兴趣的朋友可以继续参阅本站:使用maven运行Java Main的三种方法解析Java利用future及时获取多线程运行结果等,感谢阅读。希望对大家有所帮助。

相关文章

  • spring中定时任务taskScheduler的详细介绍

    spring中定时任务taskScheduler的详细介绍

    这篇文章主要介绍了spring中定时任务taskScheduler的相关资料,文中通过示例代码介绍的很详细,相信对大家具有一定的参考价值,有需要的朋友们下面来一起看看吧。
    2017-02-02
  • javaweb实现注册登录页面

    javaweb实现注册登录页面

    这篇文章主要为大家详细介绍了javaweb实现注册登录页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 重新认识Java中的ThreadLocal

    重新认识Java中的ThreadLocal

    ThreadLocal是JDK包提供的,它提供线程本地变量,如果创建一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个副本,在实际多线程操作的时候,操作的是自己本地内存中的变量,从而规避了线程安全问题
    2021-05-05
  • Java经典算法汇总之冒泡排序

    Java经典算法汇总之冒泡排序

    冒泡排序基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
    2016-04-04
  • 浅谈Java后台对JSON格式的处理操作

    浅谈Java后台对JSON格式的处理操作

    下面小编就为大家带来一篇浅谈Java后台对JSON格式的处理操作。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • Arrays.sort如何实现降序排序

    Arrays.sort如何实现降序排序

    这篇文章主要介绍了Arrays.sort如何实现降序排序问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • mybatis之foreach用法详解

    mybatis之foreach用法详解

    这篇文章主要介绍了mybatis之foreach用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 解决IDEA集成Docker插件后出现日志乱码的问题

    解决IDEA集成Docker插件后出现日志乱码的问题

    这篇文章主要介绍了解决IDEA集成Docker插件后出现日志乱码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • SpringBoot利用ThreadPoolTaskExecutor批量插入百万级数据

    SpringBoot利用ThreadPoolTaskExecutor批量插入百万级数据

    在处理大量数据时,为了提高效率和性能,通常需要采用批量插入的方式,本文主要介绍了SpringBoot利用ThreadPoolTaskExecutor批量插入百万级数据,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Java多线程窗口售票问题实例

    Java多线程窗口售票问题实例

    这篇文章主要介绍了Java多线程窗口售票问题实例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11

最新评论