Linux部署java工程

简述

对于初学者来说java项目只在开发工具上运行过,最多将web工程打个war包丢tomcat里面,至于其他得一些jar进程的服务器部署基本没尝试过,不要觉得意外,我到离开学校之前都不知道jar进程怎么部署到服务器上,而且我看了很多培训机构的课,基本都不会讲项目的部署,实际工作中你可能会接触到项目部署,特别是小公司,一般没有专门的部署团队。

在实际工作中还有很多的java工程是以进程的方式运行,打成jar包,不是所有的java项目都是web项目。

一。普通部署

(一)普通工程

简单介绍我目前所在公司的项目开发部署过程

1.首先开发人员将编写好的代码提交svn分支

2.使用pt工具(就是svn提交脚本而已)将开发分支代码同步到测试分支

3.测试人员运行打包工具(ant脚本:将svn测试分支代码拉取下来并编译打包)将项目打包,依赖打成另一个包

4.测试人员部署包到测试环境进行功能测试

针对普通的jar项目,像个人开发者没有严格的代码管理规范的,使用开发工具打包即可(我会在其他文章中接受idea的打包)

如果你把依赖单独打成一个文件了,关键的要再启动脚本中需要指定好classpath依赖的位置,否则会报找到不到类异常,你也可以老实点把依赖和项目打包在一起。像我现在所在的公司会单独把依赖打在lib目录下,和项目文件分开放,不然你改一点点代码就要重新打包上传几百M的jar到服务器,这是一件非常痛苦的事。

(二)maven工程

我在网上找了很多maven项目的部署文章,那群人只教你怎么打包maven项目,没教你怎么在服务器上运行,如果你要在服务器上运行maven项目有两种方式,这里说一下我们公司使用的ant是一种编译打包工具,简单来说ant能做的事maven都能做,除此之外还有以下功能。

1)使用Project Object Model来对软件项目管理;

2)内置了更多的隐式规则,使得构建文件更加简单;

3)内置依赖管理和Repository来实现依赖的管理和统一存储;

4)内置了软件构建的生命周期;

1.在本地打包maven项目并上传到服务器

我在打包时就遇到一些细节问题,比如我自己写的依赖包明明添加了依赖却一直打入不了,这个问题与依赖的作用域有关,需要把依赖的scope属性设置成complie。

知识点链接:https://blog.csdn.net/u011191463/article/details/68066656

还有一个问题就是依赖打进去了,但是是class文件的形式,而不是jar的形式,因为是使用spring boot,所以我打包的实现类是已经封装好war包会自动把依赖jar打入web-inf/lib下,普通jar会将依赖解压后将class导入,但暂时还不知道怎么将依赖使用jar的形势添加进去,不过我发现了另一种方式,就是通过设置idea的打包配置

效果如图

个人认为那种形式都没啥很大的区别,只是以jar的形式导入会看起来更简洁,你可以选择换成其他的打包工具类

参考链接:https://www.cnblogs.com/pu20065226/p/11052934.html(我可没验证过啊,记得先备份再操作。)或者自己再去百度“maven工程打包添加依赖”。

2.在linux服务器使用maven打包

可以优化的地方:

  1.搭建maven私服:方便把自己本地的jar添加的项目中

  2.在服务器上编写脚本从svn上拉取代码,省去了上传jar包的工作,使用脚本直接拉取代码然后使用maven编译打包到项目运行的目录,方便快捷的部署项目。

经过以上优化我们本地修改了代码提交代码到svn,然后在服务器上运行编译脚本即可实现项目的部署。

3.如果是web项目,maven还支持tomcat的热部署

参考链接:https://blog.csdn.net/it_java_shuai/article/details/83780491

开发者直接使用开发工具实现项目部署到服务器

二。容器化部署

这里简单介绍一下当前比较流行的项目部署方式,docker是用的比较多,docker的学习资料有需要的可以私信我。

docker就是将一个个应用打成镜像,镜像里面包含了软件运行所需要的环境,容器是由镜像创建出的实例,它和虚拟机很像但还是有一定的区别。

镜像和容器,就相当于类和对象的关系一样。

docker的特点

(1)上手快。

​ 用户只需要几分钟,就可以把自己的程序“Docker化”。Docker依赖于“写时复制”(copy-on-write)模型,使修改应用程序也非常迅速,可以说达到“随心所致,代码即改”的境界。

         随后,就可以创建容器来运行应用程序了。大多数Docker容器只需要不到1秒中即可启动。由于去除了管理程序的开销,Docker容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用系统资源。

(2)职责的逻辑分类

​ 使用Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。从而降低那种“开发时一切正常,肯定是运维的问题(测试环境都是正常的,上线后出了问题就归结为肯定是运维的问题)”

(3)快速高效的开发生命周期

​ Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。(通俗一点说,Docker就像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将该大盒子拿走,而不需要从该盒子中一件件的取。)

(4)鼓励使用面向服务的架构

​ Docker还鼓励面向服务的体系结构和微服务架构。Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单,同时也提高了程序的内省性。(当然,可以在一个容器中运行多个应用程序)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值