解决IntelljiIdea修改代码以后无效的问题

更新时间:2023-05-10 15:27:14 阅读: 评论:0

解决IntelljiIdea修改代码以后⽆效的问题
问题描述
正常情况下修改完代码,再次执⾏应该会执⾏新的逻辑,但是发现最后实际运⾏的还是⽼的代码逻辑,⽽新代码根本没有⽣效并且即使重启idea还是重启tomcat都没⽤。但是通过 mvn 打包(pakage)或者部署(install) 后,再运⾏发现⼜好了,但是显然⾮常⿇烦。
解决⽅案⼀
先说说我刚开始⼀个治标不治本的⽅法,修改tomcat配置如下:
我希望每次失去焦点时,IntelliJ IDEA 能帮我重新编译我修改过的类的类。当然仅仅这样还是不够,因为⼀开始我就是这样配置的,我⼀直觉得已经达到了热加载的效果了,class应该会⾃动更新才对,结果是我错了。
事实上我还需要在修改过的类⽂件上点击右键,选择Recompile重新编译(快捷键Ctrl+Shift+F9)。
Recompile:对选定的⽬标(Java 类⽂件),进⾏强制性编译,不管⽬标是否是被修改过。
⾸先第⼀个⽅案还是治标不治本,仍然很⿇烦。百度了很多⼈的解决⽅法始终不能满⾜我的需求,于是我开始思考原因。
从表现上看就像是idea保留着缓存,Recompile⼀次后就会优先读取这个重新编译后的⽂件。通常我们编译后的class⽂件都会输出到webapp/WEB-INF/class⽂件夹中,于是我将此⼀个类在此⽂件夹下对应的class⽂件按类的源⽂件修改前、修改后和Recompile 后三种情况下分别备份后进⾏⽐较发现,修改前和修改后的class是⼀样的,当Recompile后class信息发⽣了改变。但是我之前配置项⽬的时候,输出的⽂件路径不应该是在webapp/WEB-INF(maven项⽬则是target⽬录)下啊,于是我把class(或者target)整个⽂件夹删掉,重启服务器后,你会发现webapp/WEB-INF下的class⽂件⼜会重新⽣成,所以可以得出结论当你Recompile⽂件的时候,重启服务器,服务器打包⽤的类⽂件是webapp/WEB-INF下⾯的class,所以把它删掉重启就可以了。
看上去好像就是tomcat⾃动加载的配置没有⽣效似的,但是你查看你项⽬下的⽂件⽬录会发现idea帮你⽣成了⼀个out⽂件夹,打开发现⾥⾯居然也有我项⽬源码中的所有class⽂件,然后我打开Project配置终于找到了原因。
原来idea会默认帮我们⽣成⼀个out⽬录,该路径下就会保存我们所有项⽬后编译后的⽂件,但是由于我们tomcat下发布的war包所使⽤的是WEB-INF下的class⽂件,所以就造成了实时编译后的java⽂
件没有⽣效,⽽执⾏了mvn clean操作或者删除class⽂件夹后,idea会强制对所有⽂件进⾏编译,于是才得以⽣效。
修改⽅法也很简单,将上⾯的output路径改为WEB-INF/class或者是taget/class路径下即可,如果是多模块项⽬,也可以为每个模块设置⼀个编译输出路径:
就是这么⼀回事,问题终于得到解决。
上述问题是我在使⽤⼀个传统的web项⽬遇到的问题,但是我通常构建的maven项⽬却没有遇到此问题,所以你可以尝试把项⽬转化成⼀个标准的maven项⽬试试。
或者下载最新版idea,因为上述问题是我在使⽤2018版的idea时候遇到的,可能多年以后,idea已经帮我解决的此问题,当然,如果还是不能解决,可以直接装⼀个热部署神器,具体步骤请参考:

本文发布于:2023-05-10 15:27:14,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/573293.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:编译   修改   件夹   问题   重启   配置   路径
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图