各种开发工具使用与问题

开发工具问题

IDEA 控制台输出的tomcat日志乱码

tomcat/conf/下的logging.properties文件中的java.util.logging.ConsoleHandler.encoding = utf-8修改为java.util.logging.ConsoleHandler.encoding = GBK

IDEA开发工具

开发工具实用功能

  • 查看方法/属性调用链,第三方包可以下载后查看调用链
  • 查看内存调用栈帧Frames
  • 查看线程Threads

marven导入工程

无法启动可以尝试:Reimport All Marven Projects。 Lifecycle执行 clean、install

想要干净的工程文件

可以使用Idea的导出功能导出zip,解压出来就算原始的代码了,可以提交SVN。可以单独创建一个关联SVN的目录进行提交操作。
IDEA的重命名功能非常好用,还有MOVE功能可以改包名。

旧JavaWEB项目启动

  • Tomcat6.0 根据需要添加servlet_2.5.jar
  • Modules/Facets添加Struts、web.xml、WebResourceDirectory(工程目录/WebRoot)
  • Libraries添加相应jar包
  • Artifacts的Available Elements选择工程右键添加classes等

IDEA安装Lombok

File–>Settings–>Plugins–>Marketplace–>搜索lombok–>install。 重启IDEA

Idea开启annotation processing: File–>Settings–>Build,Ececution,Deployment–>Compiler–>Annotation Processors–>勾选 Enable annotation processing–>Apply

DEBUG

通过debug查询详细调用链
通过分析工具查看类依赖关系图
调试可以通过错误提示信息搜索到对于代码位置进行断点查看调用链

debug中key右键Frames中的方法,Copy Stack复制调用链

下载源码搜索功能

点击右侧Maven→下载代码按钮,没下载源码部分在源码包里面的代码没办法直接搜索
IDEA可以ctrl+shift+r选择scope Project and Libraries查询包中的方法

关联现有SVN

VCS菜单→Enable Version Control Integration…→Subversion
右键工程→Subversion→Share Directory…

可以对编译后的文件,IDEA文件标记为忽略状态,不提交到SVN服务器。SVN客户端也有这个操作,可以批量标记后提交删除服务器上已经删除的无用文件。

IDEA启动多个相同项目

Run/Debug Configurations → 复制一个配置 → Override parameters:添加server.port=8085

DUMP分析内存

4:runDump Threads Ctrl+Pause/Break 查看线程Dump,内容信息可以点击打开查看详情,查找正在运行的线程
Attach Debugger debugger中分析
servicesGet Dump Threads

通过Export to Text File 再通过线程名字就可以搜索到对应的线程信息非常好用

maven 打包 skip test

maven配置→Runner→勾选Skip tests
或者命令执行是用-Dmaven.test.skip=true 或者 -DskipTests
或者POM文件中加skip
或者maven的install界面中有一个跳过测试的闪电按钮

导入maven项目

打开maven工程,执行右侧maven菜单,点击刷新按钮,执行clean操作,不行的话就试试compile、 intall。还可以执行Build→Rebuild Project

修改代码不生效

有时候修改不生效可能自动编译功能出了问题,可以断点看看断点有没变成红色叉叉。或者重新执行install看看。
修改On ‘Update’ action: Update classes and resources
修改on frame deactivation: Update classes and resources 也就是idea失去焦点的操作,一般更新resources就够了

右下角Event Log可以查看最近编译时间

扩展配置:

  1. maven
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
    </dependency>

    <build>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
    <fork>true</fork>
    </configuration>
    </plugin>
    </plugins>
    </build>
  2. 设置IDEA
    组合键:“Shift+Ctrl+Alt+/” ,选择 “Registry” ,选中打勾 “compiler.automake.allow.when.app.running”
  3. “File” -> “Settings” -> “Build,Execution,Deplyment” -> “Compiler”,选中打勾 “Build project automatically”

查看字节码

  1. 安装jclasslib插件 运行。view→show Bytecode With jclasslib,点击里面方法可以看到字节码
  2. 直接view → show bytecode 信息不全
  3. javap -v 类名 不好用效率低

查看汇编代码

  1. hsdis-amd64.dll hsdis-amd64.lib 将两个文件放在你的 jre/bin 路径下的路径里
  2. 去idea 去配置启动参数VM Options: -server -Xcomp -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:CompileCommand=compileonly,*ClassName.method*后面配置成自己的 “类名.方法名”)
  3. JRE选择刚刚放置文件的jre路径
  4. 运行程序,会打印出相关汇编代码

生成.iml

  1. 刷新一下Maven Project就会自动生成.iml文件
  2. 在缺少.iml文件项目下运行mvn idea:module

远程调试JPDA

Linux(bin/catalina.sh

1
2
3
4
5
6
7
8
# 将 localhost 改为 0.0.0.0
if [ -z "$JPDA_ADDRESS" ]; then
JPDA_ADDRESS="0.0.0.0:8000"

# 启动调试
./catalina.sh jpda start
# 停止
./catalina.sh jpda stop

Run→Edit Configurations 添加远程调试配置,选 Remote,不是 Tomcat server 下的 Remot
输入Host与Port,选择本地工程项目与服务器代码相同的项目,OK启动调试
在服务器上webapps目录放入对应项目的war包,自动解压后启动过程都可以调试

调试案例Epoll方法linux环境才会走进去:

1
2
3
4
io.netty.bootstrap.Bootstrap             : Failed to set channel option 'ALLOCATOR' with value 'PooledByteBufAllocator(directByDefault: true)' for channel '[id: 0x8ec36861]'
java.lang.NoSuchFieldError: TCP_FASTOPEN
at io.netty.channel.epoll.EpollChannelOption.<clinit>(EpollChannelOption.java:39)
at io.netty.channel.epoll.EpollSocketChannelConfig.setOption(EpollSocketChannelConfig.java:147)

对setChannelOptions方法进行断点,EpollSocketChannelConfig 147行} else if (option == EpollChannelOption.TCP_CORK) {报错,option 的name是ALLOCATOR,value是PooledByteBufAllocator(directByDefault: true)是个复杂对象。option,没办法==后面的对象,报错打印错误信息。但是报错后会打印异常继续往下循环setOption所以还是可以正常用的。比如SO_KEEPALIVE等的设置。

maven打包

记得要clean再install不然会把旧的类什么的也打包进去,还要在上级进行install。

IDEA没有认到项目

右键子工程POM文件→Add as Maven Project

注意

  1. 不要重复引人依赖。
  2. 不要引入冲突的包。
  3. 重启idea试试。

问题汇总

Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.5.1, expected version is 1.1.16

不适用AndroidStudio

  1. IDEA 打开设置: flie -> settings -> plugins 找到 kotlin 插件
  2. 把 kotlin 插件 disable,然后restart IDEA

Visual Studio Code

乱码问题:可以安装GBKtoUTF8插件或者Reopen with Encoding

CSV

csv就是文本存储通过分隔符分隔字段,可以存储长数字的,用Excel打开会出现显示问题,通过记事本,或者程序打开是正常的。

SVN使用

如果文件夹冲突出现红色可以右键标记成已经解决。