gradle下bug修正后问题仍存在解决思路

目录

    • 我的学习过程
    • 我的学习心路
    • 热加载配置
    • bug问题总结

我的学习过程

前天写的client-server聊天项目写完后,今天进行了调试。我用到的是out目录下的server.class文件和client.class文件。
先后启动两个命令行窗口来进行测试的。
使用java server启动服务端窗口。
再使用java client启动客户端窗口。

客户端发送四次信息

ni
hao
zhong
guo

客户端发给服务端的信息正常情况下,服务端接收后屏幕打印一律显示了str。

客户端打印的四次信息

str
str
str
str

我的学习心路

客户端的发送的具体信息,全是str。为什么呢?

我的操作心路
首先是服务端显示异常,所以定位到server.java的代码。定位到问题代码如下:

// 有bug的java代码
System.out.println("str");

我的操作心路
这个bug简单,就是不小心加了双引号,导致直接打印了字符串str。修正!我用的是gradle管理项目,进行了clean、build、rebuild project后,继续使用两个命令行窗口进行测试。

我的心里路程
问题没有得到解决。我想想会是什么原因呢?明明已经改过来了。该怎么解决呢?我或许可以尝试到idea里打断点进行调试,看看是不是有其他代码问题。

我的操作心路
说干就干,在idea里配置两个tomcat试试,学习了tomcat的热加载配置。

热加载配置

找到tomcat的目录下找到conf/server.xml文件,打开,
在host节点下增加Context节点。

<Host name="localhost"...
...
<Context path="项目路径" docBase="/【某目录名】" debug="0" privileged="true" reloadable="true"/>
...
</Host>

属性概念:

debug=“0”
debug是设定debug level, 0表示提供最少的信息,9表示提供最多的信息。

privileged=“true”
privileged设置为true的时候,才允许Tomcat的Web应用使用容器内的Servlet。

reloadable=“true”
会让修改生效,该选项适合调试。

我的心里路程
我发现,上面参数里【某目录名】是建在webapps目录下,目录里面需要放置项目编译后的class文件和项目的jar包。但是同样class文件在目录中存在了2个地方。

一个是out/production/classes目录下
另一个build/classes/java/main目录下

我的心里路程
老师的课程用的是out目录下的class文件,我也是使用out目录下的,是什么原因导致修正不生效呢?为什么有2个地方的class?

我的操作心路
百度一下看看:推测出,由于每次使用的是out目录下的class文件,但clean、build、rebuild project并没有修正out文件下class文件。是每次都不起作用呢?还是一定时间间隔后起作用?有待考证*1

我的操作心路
使用tomcat热加载后,问题得倒了解决。

我的心里路程
推测两种可能:

  1. reloadable="true"可以对out目录下的class文件修正。
  2. 或者热加载使用的是build目录下的class文件。
    有待考证*2
    标记:学习下gradle的目录结构或源网站的说明。

考证*1
我的考证结果:有待考证*1处思考有误。
我的考证思路:
在Server.java中添加打印语句,观察两处class文件是否添加该打印语句进行来验证。

两种build验证:

  1. idea上方导航栏build(clean project、build project、rebuild project)
  2. idea窗口右侧边栏Gradle-Tasks下build(clean、build)

第一种build下:针对的是out目录下的class
Server.java修改后,

  1. 若未进行clean project,则build project和rebuild project都未能修正out目录下的Server.class。
  2. 若先进行了clean project,则build project和rebuild project都能修正out目录下的Server.class。

第二种build下:针对的是build/classes/java/main目录下的class
Server.java修改后,

  1. clean直接会删除build/classes/java/main整个目录和Server.class文件。
  2. 直接build就可以修正build/classes/java/main目录下的Server.class文件。

考证*2
我的考证结果:有待考证*2处思考有误。热加载使用的是out目录下的class文件。
我的考证思路:
利用两种build的不同点使两处的class文件具备不同的打印语句。观察运行后窗口的打印语句。

out目录下的Server.class:
System.out.println("-------bad1----");

build/classes/java/main目录下的Server.class:
System.out.println("-------bad2----");

Server.java:
System.out.println("-------good----");

启动tomcat,运行Server.java,窗口打印结果:

-------good----

out目录下的Server.class内打印语句发生变化:
System.out.println("-------good----");

out目录下的class能修正,是否与reloadable="true"有关呢?
我的心里路程
把reloadable设置false试试。重复上面操作。
结果:不影响out目录下的class的修正。

百度了解:这个属性设为true,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到有class文件被更新的,服务器会自动重新加载Web应用。

我的思考
设为false时,第一次启动tomcat也会调一次监测吗?或者说服务器重启了会重新加载更新一次,重启与这个属性无关?
设为true时,启动tomcat,运行Server.java,修改Server.java,保存重新编译(修正了out目录下的class)。Server.java并没有重新加载。啊哦!想错了。监视的是WEB-INF/classes和WEB-INF/lib目录下class文件。与out目录下的class无关。想错了,哈哈哈。

bug问题总结

我错在使用的是第二种的clean,针对的是build/classes/java/main目录下的class。未使用第一种的clean project再build project,针对的是out目录下的class。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IP-tools

IP-tools 网管员的第三只眼^ Ip-tools是一款功能齐全的网管软件&#xff0c;可以随时随地的向网管员报告网络的运行情况ip-tools自身集成多种tcp/ip使用工具&#xff0c;如本地信息、链接信息、端口扫描、ping、WHOIS、finger、nslookup、telnet、NetBIOS等功能。界面是全英的&…

用git提交代码到远程仓库遇到的问题

目录我的学习过程git环境配置&#xff08;Mac版&#xff09;git原理图git的push操作思路遇到的问题我的学习过程 昨天重写了一遍聊天程序&#xff0c;准备提交到git上进行代码管理。结果遇到了不少问题。我照着网上的教程进行操作&#xff0c;一步一步踩了很多坑。 git环境配…

数字示波器的激烈竞争

计算机、通信以及消费类电子产业的快速发展成为示波器发展的不竭动力&#xff1b;厂商不断从技术上对示波器进行改进更使其发展日新月异。 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />数字示波器自它诞生的第一天起&#xf…

git pull和push整理和归纳

目录各个模块概念工作区版本库暂存区远程仓库pull和push流程相关的命令暂存区相关版本库相关远程仓库相关利用远程仓库协作开发各个模块概念 我的理解&#xff1a; Git是版本管理工具&#xff0c;它主要对指定目录下的一些特定的文件的修改进行版本管理。 相关的模块有&#x…

重装vcenter后恢复原来制作的模板!

重新安装vcenter后发现原来用vcenter创建的模板没有了。清单中只显示现有的4台虚拟机&#xff0c;没有显示模板。其实找回来也很简单&#xff01;在清单中找到数据存储&#xff0c;在相应的模板文件夹中找到的.vmtx文件添加到清单中去即可&#xff01;转载于:https://blog.51ct…

Linux中点号,星号,加号,问号实战

目录Linux中的星号&#xff0c;点号和加号概念我的学习过程&#xff1a;我的思考过程&#xff1a;点号&#xff08;.&#xff09;星号&#xff08;*&#xff09;加号&#xff08;&#xff09;问号&#xff08;?&#xff09;linux星号&#xff0c;点号&#xff0c;加号&#xf…

如何调整HOOK的跳转指令

可以按这样的方式来存放 长度A 长度A 用于调整Short JMP 用于存放一些信息 |调整后的原HOOK代码 |原始代码(HOOK) |临时LONG JMP区| 信息区| 1). 调整…

广播地址的计算方法(与运算、或运算)

目录我的学习过程Python中逻辑运算符notandor位运算符取反&#xff08;~&#xff09;与&#xff08;&&#xff09;或&#xff08;|&#xff09;广播地址计算方法IP地址子网掩码网络地址广播地址广播地址计算举例我的学习过程 今天学习UDP的单播、多播、广播中&#xff0c;…

Wt::WTreeNode

2019独角兽企业重金招聘Python工程师标准>>> A single node in a tree. 〔 这个 widget 渲染的是一棵树的一个节点。〕 A tree list is constructed by combining several tree node objects in a tree hierarchy, by passing the parent tree node as the last arg…

匿名内部类探究——它是一个实例

目录我的学习过程匿名内部类概述匿名内部类探究代码验证&#xff08;匿名内部类是一个实例&#xff09;结论我的学习过程 昨天想学习一下Java8新特性&#xff0c;看到Lambda表达式可以替代匿名内部类。我对匿名内部类不太理解&#xff0c;决定学习一下。并进行了下面的归纳和思…

利用SQL查找表中的质数(prime number)和完全数(perfect number)以及几个有趣的SQL语句...

之前在某次interview中被老外问到如何用SQL找出列上的质数和完全数的问题&#xff1b;我当时已经多年没有写过这种考算法和SQL技巧(纯粹的技巧)的语句了&#xff0c;乍遇此问题倒是有些棘手。现在录以记之&#xff0c;供人参考. SQL> create table numbers(NO int) ;表已创建…

Lambda表达式及应用

目录Lambda表达式概念应用在forEach()方法使用用来替代匿名内部类代码验证&#xff08;Lambda表达式替代匿名内部类&#xff09;Lambda表达式 概念 语法形式&#xff1a; () -> {} 组成&#xff1a; 括号&#xff1a;表示参数列表&#xff1b;箭头&#xff1a;表示lambda…

UrlRewriter 伪url的配置

UrlRewriter 是微软封装好了的一个URL重写组件。使用它可以让我节约很多自已开发的时间。 好了&#xff0c;开始讲述我的应用经验&#xff0c;这只是很菜鸟的经验&#xff0c;高手就不用看了。 第一步&#xff0c;请从此下载此组件。解压&#xff0c;把UrlRewriter.dll copy到你…

网络地址和广播地址的快速计算方法

目录前提条件方法原理网络地址快速计算示例广播地址快速计算示例前提条件 由IP地址和子网掩码&#xff0c;快速计算网络地址和广播地址。 小窍门前提&#xff1a;当子网掩码组成只有255和0组成时。 方法原理 利用255&#xff08;或者0&#xff09;和其他数字的&&#xf…

职场提醒:面试失败n次以后

投了一份简历&#xff0c;是中国一个很有名的医药公司的职位。面试后对方回复说&#xff0c;我不符合他们的要求。之前也参加过很多公司面试&#xff0c;结果都是说我经验不足。一次次的失败也让我对自己有了新的认识&#xff0c;也不断的刺激我。发现一个工作经验不足的人&…

关于list遍历时sychronizedList方法和synchronized同步块的线程安全问题思考

目录我的难点sychronizedList方法无法解决List遍历时线程不安全问题sychronizd同步块为什么可以解决List遍历时线程不安全问题我的思考过程我的难点 sychronizedList方法无法解决List遍历时线程不安全问题 关于慕课网的socket课程学习中&#xff0c;qiujuer老师在课程中讲到&…

WinCE CEDDK之DMA相关函数

CEDDK提供了DMA的相关函数&#xff0c;在CEDDK/DDK_DMA/ddk_dma.c中定义。实际上里面最有用的就两个函数&#xff0c;HalAllocateCommonBuffer(..)和HalFreeCommonBuffer(..)分别用于为DMA申请和释放 首先介绍一下会用到的DMA适配器结构&#xff0c;在ceddk.h中定义,如下: type…

Navicat中无法自定义标量值函数的问题

目录自定义标量函数代码自定义函数无法创建问题自定义标量函数代码 我的思路&#xff1a;我要创建一个自定义标量函数。使用软件&#xff1a;navicat12.1版本。点击Fx图标进行创建。代码中&#xff0c;使用num作为入参&#xff0c;根据num的大小返回颜色。num大于0返回白色&am…

把十六进制字符转换成十进制数

2019独角兽企业重金招聘Python工程师标准>>> /*** Get the hex value of a character (base16).* param c A character between 0 and 9 or between A and F or* between a and f.* return An int between 0 and 15, or -1 if c was not a hex digit.*/public stat…