良心公众号

关注不迷路

01

简单Java程序的启动过程

在之前的HelloWorld是怎么跑起来的?一文中,我们一起学习了IDE执行简单的Java程序的过程。可以总结为如下三个步骤:

  • 首先,将程序通过javac命令进行编译,得到.class文件。

  • 然后,idea通过java命令的-javaagent参数对将要运行的程序加以监控。

  • 之后,JVM执行.class文件

而在日常的工作中,我们面对的往往不是像HelloWorld这样简单的程序,更多的是诸如复杂的Java Web之类的项目,那么对于庞大的Java Web项目而言,它又是怎么跑起来的呢?当构建一个Java Web项目时,在程序的世界里,究竟发生了些什么?这篇文章让我们来一探究竟。

02

Maven相关知识综述

我们在上文中提到了一个词,叫“构建”。那么问题来了,何为构建?除了编写代码以外,我们日常工作中所做的编译运行单元测试生成文档打包部署等等这一系列的动作,就是构建。

对于同一个Java Web项目,选择不同的构建工具,其跑起来的细节会略有差异。比较常用的构建工具有较为古老的Ant,当下主流的Maven,以及新兴的Gradle等等……而本文将以当下最主流的Maven为例,讲述Java Web的构建过程。

虽然可能很多小伙伴对Maven已经非常熟悉,但在讲述具体的构建流程之前,我们还是先对Maven做一个总体的介绍,以统一一下对Maven的认识。

Maven主要有三个功能:项目构建依赖管理项目信息管理

  • 项目构建:Maven提供这样的功能,使得用户仅通过简单的命令,就能实现编译、运行单元测试、生成文档、打包和部署等流程的自动化。

  • 依赖管理:Maven提供了可能是世界上最全的免费中央仓库,帮助我们自动下载构件,并通过精心设计的groupId,artifactId和version组成的坐标帮助我们管理纷繁复杂的依赖。

  • 项目信息管理:Maven还能帮助我们管理原本分散在项目中各个角落的项目信息,包括项目描述开发者列表版本控制系统地址许可证缺陷管理系统地址等。

在了解了Maven的主要功能之后,我们回到本文的主题。我们会发现,依赖管理功能和项目信息管理功能发挥作用更多地是体现在我们的编码阶段,通过其提供的强大的依赖管理功能和便捷的项目信息管理功能,我们能够从繁杂的依赖管理中跳脱出来,从项目的细枝末节中抽身出来,集中精力在编码这件事情上,从而提高我们的工作效率。而项目构建的功能,则自然是在项目的构建过程中发挥作用,这也正是我们今天要关注的重点。

假设现在有一个已经开发完成的Java Web项目,我们使用Maven对其进行构建。常用的命令有如下几个:

// 删除target目录下的内容
mvn clean// 编译main目录的源代码
mvn clean compile// 编译main和test目录的源代码,并按照pom的定义打包
mvn clean package// 编译main和test目录的源代码,按照pom的定义打包,并发布到本地仓库
mvn clean install// 编译main和test目录的源代码,按照pom的定义打包,并发布到本地和远程仓库
mvn clean deploy

03

Java Web项目的启动过程

了解了上面这些命令的作用之后,我们再来详细看一下Java Web项目的启动过程。

我们梳理一下Java Web项目启动所需要的步骤,或者说,如果我们需要实现一个一键构建Java Web项目的服务(暂且称之为build service),我们应该怎么做?

  • 首先,我们需要选择Java Web项目所对应的git仓库,及需要发布的提交。因此,build service需要接入git。

  • 接下来,我们需要选择Java Web项目需要部署到的目标机器。因此,build service需要有一个接口可以获取当前可用的所有机器列表,当然,如果需要更细维度的选择,我们可以对不同集群的机器加以区分。

  • 我们在build service上选择了需要发布的提交,以及需要部署的目标机器之后,deploy service会拉取这个提交所对应的代码,然后需要执行mvn clean package操作进行编译打包,并将包传输至目标机器。

    这个地方可以共同约定,在项目中附加一个构建脚本,然后build service根据传输参数的不同,可以支持有选择的构建某个模块,或者根据集群不同执行不同的操作等等个性化的需求。

  • 到这时,一个可执行的包已经存在于目标机器上了,但是它还没有启动,一个最简单的办法就是登录这台机器,并手动启动即可。但这显然不符合自动化的要求,因此,我们依然可以通过共同约定,在项目中附加一个启动脚本,在build service将可执行的包传输至目标机器之后,再执行这个启动脚本,实现服务的启动。

上述四个步骤我们可以汇总成一张简单的图,如下所示:

以上就是一个Java Web项目启动的整体流程,当然,这里面并没有展开讲述一些之前已经提到过的细节,比如编译过程是由javac将程序编译成.class文件,然后启动的时候,是由JVM去执行这些.class文件等等。可以参考相关链接中历史文章的讲述。

04

相关链接

HelloWorld是怎么跑起来的?

每日一面——你对Class文件了解多少?

每日一面——谈谈你对类加载机制的理解

05

参考资料

《Maven实战》许晓斌著

今天关于Java Web项目是如何运行起来的总结就到这里了。

欢迎大家一起讨论技术,共同成长!

学习 | 工作 | 分享

????长按关注“有理想的菜鸡

只有你想不到,没有你学不到

Java Web项目是怎么跑起来的?相关推荐

  1. Java web项目如何在服务器上跑起来(有源码)

    Java web项目如何在服务器上跑起来(有源码) 要用到的工具有:myeclipse.宝塔,navicat premium.xshell. 概述:本博文主要是帮助入门级新手怎么从网上下载一个java ...

  2. boot项目中pom依赖已经删除了但是maven上还是报红线_Java Web项目是怎么跑起来的?...

    良心公众号 关注不迷路 01 简单Java程序的启动过程 在之前的HelloWorld是怎么跑起来的?一文中,我们一起学习了IDE执行简单的Java程序的过程.可以总结为如下三个步骤: 首先,将程序通 ...

  3. 解决Java Web项目无法读取配置文件问题

    错误描述 报错信息如下图所示,Web应用后台在读取配置文件的时候,系统找不到指定的路径. 这是Java Web项目的目录结构: 这是报错部分的代码: static {try {Properties p ...

  4. java错误无法读取配置文件_解决Java Web项目无法读取配置文件问题

    错误描述 报错信息如下图所示,Web应用后台在读取配置文件的时候,系统找不到指定的路径. 这是Java Web项目的目录结构: 这是报错部分的代码: static { try { Properties ...

  5. 实战:在Java Web项目中使用HBase

    在此之前我们使用MySQL作为数据源,但发现这数据增长速度太快,并且由于种种原因,因此必须使用HBase,所以我们要把Mysql表里面的数据迁移到HBase中,在这里我就不讲解.不争论为什么要使用HB ...

  6. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  7. Java Web项目结构

    Java Web项目结构(一般) 1.Java src 2.JRE System Library 3.Java EE 6 Libraries 4.Web App Libraries 5.WebRoot ...

  8. java web ubuntu_Ubuntu部署Java web项目

    登录服务器和给服务器传输文件,使用的工具是Xshell Xftp Mysql 安装mysql 输入:sudo apt-get update                     更新软件列表 输入: ...

  9. JAVA Web项目中所出现错误及解决方式合集(不断更新中)

    JAVA Web项目中所出现错误及解决方式合集 前言 一.几个或许会用到的软件下载官网 二.Eclipse的[preferences]下没有[sever]选项 三.Tomcat的安装路径找不到 四.T ...

最新文章

  1. Jquery中获取表单的值并提交
  2. linux ndk编译静态库,Android开发教程:NDK编译静态库失败
  3. 统计日志中ip访问次数并排序的三种方法
  4. python赋值语句的一般格式为_[零基础学Python]赋值,简单也不简单
  5. pat 乙级 1003 我要通过!(C++)
  6. php数组如何去掉相同的元素,如何去掉php数组中的重复的元素
  7. SpringMVC防止XSS攻击
  8. html界面选择按钮没法取消,如何使用JavaScript取消选择按钮
  9. DameWare NT Utilities
  10. android点击监听,android基础之点击监听器的2种监听实现
  11. 算法导论 中+英 PDF分享 附书单
  12. java计算机毕业设计基于web旅游网站的设计与实现源码+数据库+系统+lw文档+mybatis+运行部署
  13. 2021 年“泰迪杯”数据分析技能赛 B 题 肥料登记数据分析
  14. 动手学深度学习-windows下环境配置
  15. 【最小割】HDU 5294 Tricks Device
  16. 研究心得:调研文献“快而全“的三步
  17. VMware vSphere理论
  18. 设计脉宽占空比50%,25%可调的脉冲发生器
  19. 聊一聊世界杯里的数学知识
  20. EPS是什么文件格式

热门文章

  1. W-2 Grub4dos硬盘安装BackTrack
  2. 机器学习项目案例 简单的数字验证码自动识别
  3. 微软Project Online落地中国
  4. HTML5+CSS大作业——蓝色的异清轩个人博客(6页) 个人博客模板源码异清轩博客
  5. C|倒三角(trangle)
  6. python爬虫实现批量下载百度图片
  7. 云脉相册检索,关键词快速定位图片
  8. 蓝牙耳机哪个品牌性价比高?高性价比真无线蓝牙耳机
  9. 如何以身作则,做孩子的榜样
  10. Altium Designer中如何实现元件Designator自动编号