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 Boot与RabbitMQ结合实现延迟队列的示例

    Spring Boot与RabbitMQ结合实现延迟队列的示例

    本篇文章主要介绍了Spring Boot与RabbitMQ结合实现延迟队列的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • J2EE中的struts2表单细节处理

    J2EE中的struts2表单细节处理

    这篇文章主要介绍了J2EE中的struts2表单细节处理的相关资料,需要的朋友可以参考下
    2017-06-06
  • SpringBoot如何使用注解进行XSS防御

    SpringBoot如何使用注解进行XSS防御

    在SpringBoot中,可以通过自定义@XSS注解和实现XSSValidator类来防御XSS攻击,此方法适用于GET和POST请求,通过在方法参数或实体类属性上添加@XSS注解,并结合@Valid或@Validated注解使用,有效拦截潜在的XSS脚本,保障应用安全
    2024-11-11
  • Java利用DelayQueue实现延迟任务代码实例

    Java利用DelayQueue实现延迟任务代码实例

    这篇文章主要介绍了Java利用DelayQueue实现延迟任务代码实例,DelayQueue 是一个支持延时获取元素的阻塞队列, 内部采用优先队列 PriorityQueue 存储元素,同时元素必须实现 Delayed 接口,需要的朋友可以参考下
    2023-12-12
  • SpringBoot集成Shiro进行权限控制和管理的示例

    SpringBoot集成Shiro进行权限控制和管理的示例

    这篇文章主要介绍了SpringBoot集成Shiro进行权限控制和管理的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • SpringBoot项目中控制台日志的保存配置操作

    SpringBoot项目中控制台日志的保存配置操作

    这篇文章主要介绍了SpringBoot项目中控制台日志的保存配置操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • java Class文件内部结构解析过程详解

    java Class文件内部结构解析过程详解

    java class的文件结构,java class文件结构是基于字节流的,用unicode进行编码,下面说说java Class文件内部结构分析
    2013-11-11
  • MyBatis-Plus 分页不生效的解决方法

    MyBatis-Plus 分页不生效的解决方法

    本文主要介绍了MyBatis-Plus 分页不生效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Java String相加底层原理分析

    Java String相加底层原理分析

    这篇文章主要介绍了Java String相加底层原理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Java Web应用小案例之实现用户登录功能全过程

    Java Web应用小案例之实现用户登录功能全过程

    在Java开发过程中实现用户的注册功能是最基本的,这篇文章主要给大家介绍了关于Java Web应用小案例之实现用户登录功能的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-01-01

最新评论