debug模式下的讲解
自己写给自己的bug:
自动化代码里A方法调用B方法,B调用了C,A单独又调用了C。。。排查了好久,日志有时候保错不准确
objc[1085]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/bin/java (0x10c6e24c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x10c7be4e0). One of the two will be used. Which one is undefined.
参考博客:https://www.cnblogs.com/taojintianxia/p/8399246.html
一番google后, 找到答案 :
1.close the project in intelliJ
2.File -> New -> project from existing resources
3.use Import from external model (if any)
4.open the project again.
目前发现其实是因为机器上新装了一个JDK, 导致之前项目设置的JDK "人格分裂"
右键项目 -> open module settings -> Project
在project jdk上edit,然后选一个最新的jdk即可
我倒是没有新装jdk,我是升级了IDEA,导致JDK人格分裂。使用如上步骤设置后,运行正常,千万记得不要重新Import Project
要Open
idea IDEA常用快捷键
Option + Enter 快速导包或者缺少的方法
格式化快捷键:option+command+L
(如 int a=1; 可以变为int a = 1;
System.out.println((s1.maleGener ? "男" : "女") + s1.age); // 条件表达式 成立打印?后面的值,否则打印:后面的值
System.out.println("s1的性别===" + (s1.isMaleGener()?"男":"女"));
)
if () {} else {} 有时候{}比较多时,代码包含关系错乱,双击{后可选中该条件后的所有代码,分级清晰
Command +D 复制当前行到下一行
Debug 向下箭头==执行下面的一行代码,一行行往下走
右下箭头==跳入调用方法里 ,一般不会用这个
Command + 删除键 删除当前行 或选中的行
// JSONObject systemInfo = json.getJSONObject("systemInfo");等同于如下
// 获取json中的某个值,值的类型为json
String trackInfoAppend = json.getString("trackInfoAppend");
// 把获取的value值为json的自动转换为json
JSONObject trackInfoAppendToJson = JSON.parseObject(trackInfoAppend);
无参 有参构造方法快捷键,右击或者command+N,Generate-Constructor,全选,同时生成无参构造方法 有参构造方法
选中多行代码向上移动快捷键
option+ shitf+ 键盘向上
public static void main(String[] args) {
}
快捷键:输入psvm 然后按enter 就可以自动生成啦
System.out.println(); 快捷键为 sout
属性封装:也会自动联想
生成get set方法快捷键,右击或者command+N,Generate-Getter and Setter
command+。收起展开某个方法
当前类在的项目工程中的路径、定位。点击X按钮
方法的重载 @Override 自动联想继承的父类方法,选择-回车
Command+shift+R 全局替换字符 方法名 类名
Command+shift+F 全局查找字符 方法名 类名
command + “+”/ command +“-”展开 / 折叠代码块
command + shift + “+” 展开所有代码块
command + shift + “-” 折叠所有代码块
command + shift + 向上箭头 当前选中的代码上移
command + shift + 向下箭头 当前选中的代码下移
IntelliJ IDEA 统一设置编码为utf-8编码,开发 测试项目全局都为utf8
Preference- Editor- File Encodings- UTF-8
设置完后重新打开项目就生效了
maven指令
脚本接入实验室,定时任务执行
mvn clean compile
mvn compile exec:java -Dexec.mainClass="com.alibaba.sdksearch.ClientParamParse"
删除之前的dependency
mvn clean -U test-compile
刷新就ok了
常用命令:先执行mvn clean,然后再执行一下mvn package -U ,第二个命令能治百病
由于要接入公司的平台,每天定时运行代码,生成报警,钉钉消息。需要用maven指令运行代码,但报错如下
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java (default-cli) on project clientParamWatch: An exception occured while executing the Java class. com.alibaba.sdksearch.RunProcess -> [Help 1]
原因:
开始以为是 这个类 com.alibaba.sdksearch.RunProcess 没有,jar包依赖 应该没引入,classnotfound是缺少类,运行时发现缺少了。
于是,要把所有的jar包都打好,再放到运行环境
参考博客:https://blog.csdn.net/qq_17213067/article/details/82771745
【JAVA】idea mac打Jar包build方法及Maven方法
但不生效,连续问了8 9个RD大神,最终解决方案如下:
跟着大神学习了一招,把我电脑的代码传到他电脑上,使用如下命令
rsync -e ssh -aP clientParamWatch is@ipv4(地址):src
关于rsync 可以参考 https://blog.csdn.net/cdnight/article/details/78861543
cd /Users/lishan/Desktop/code/clientParamWatch
mvn compile
mvn exec:java -pl :clientParamWatch-service -Dexec.mainClass=com.alibaba.sdksearch.RunProcess
// 指定子工程目录
因为是用潘多拉生成的项目,我的主程序在子项目里,需要用pl指定子项目文件。此命令执行时候需要进入到项目路径,再指定主程序入口的文件夹,执行命令
当前路径下查找文件名 : find . -iname 'Run*.class'
关于setting.xml
参考博客-非常赞的博客建议仔细学习 https://www.cnblogs.com/jingmoxukong/p/6050172.html?utm_source=gold_browser_extension
settings.xml文件是干什么的,为什么要配置它呢?
从settings.xml的文件名就可以看出,它是用来设置maven参数的配置文件。并且,settings.xml是maven的全局配置文件。而pom.xml文件是所在项目的局部配置。
settings.xml中包含类似本地仓储位置、修改远程仓储服务器、认证信息等配置。
settings.xml文件位置
settings.xml文件一般存在于两个位置:
全局配置: ${M2_HOME}/conf/settings.xml
用户配置: 𝑢𝑠𝑒𝑟.ℎ𝑜𝑚𝑒/.𝑚2/𝑠𝑒𝑡𝑡𝑖𝑛𝑔𝑠.𝑥𝑚𝑙𝑛𝑜𝑡𝑒:用户配置优先于全局配置。{user.home} 和和所有其他系统属性只能在3.0+版本上使用。请注意windows和Linux使用变量的区别
配置优先级
需要注意的是:局部配置优先于全局配置。
配置优先级从高到低:pom.xml> user settings > global settings
如果这些文件同时存在,在应用配置时,会合并它们的内容,如果有重复的配置,优先级高的配置会覆盖优先级低的
/Users/lishan/.m2/settings.xml
每个公司的配置都不一样
<?xml version="1.0"?>
<settings>
<servers>
<server>
<id>snapshots</id>
<username>snapshotsAdmin</username>
<password>123456</password>
</server>
<server>
<id>releases</id>
<username>admin</username>
<password>screct</password>
</server>
</servers>
<!-- ======================================================================== -->
<!-- mirror settings -->
<!-- ======================================================================== -->
<mirrors>
<mirror>
<id>tbmirror-all</id>
<mirrorOf>*</mirrorOf>
<name>taobao mirror</name>
<url>http://mvnrepo.alibaba-inc.com/mvn/repository</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://mvnrepo.alibaba-inc.com/mvn/repository</url>
</repository>
<repository>
<id>snapshots</id>
<url>http://mvnrepo.alibaba-inc.com/mvn/repository</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://mvnrepo.alibaba-inc.com/mvn/repository</url>
</pluginRepository>
<pluginRepository>
<id>snapshots</id>
<url>http://mvnrepo.alibaba-inc.com/mvn/repository</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<pluginGroups>
<pluginGroup>com.alibaba.org.apache.maven.plugins</pluginGroup>
<pluginGroup>com.alibaba.maven.plugins</pluginGroup>
</pluginGroups>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
每次下载代码后记得IntelliJ IDEA-Preference-maven-User setting files-选择/Users/lishan/.m2/settings_new.xml
否则pom.xml报错,代码报错
最近安了最新的版本,导致一些配置需要再设置一遍,参考mac使用idea编译器快捷键的设置
https://jingyan.baidu.com/article/fb48e8bee098446e622e14f6.html
keymap -Default for macOS
如遇每次运行代码控制台都飘红显示如下
objc[38151]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/bin/java (0x104d0e4c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x104d8e4e
这是Mac 上面Java 的一个老Bug了,会在那些使用了Java Agent 的IDEA 上运行应用时触发,但这个错误对程序的运行是无影响的,可以无视,而且,在Java 9和Java 1.8.152 版本里已经修复了,话虽如此,但是看着飘红特不舒服啊!
所以对于这个问题的【解决方案】是:
点击IDEA 最上面菜单的Help-Edit --> Edit Costom Properties,如果没有这个Properties 文件的话,IDEA 会提示创建,创建之后在里面添加如下代码:
idea.no.launcher=true
最后,如果运行了还不行,还飘红报错的话,请重启IDEA,一定有效
参考博客 https://blog.csdn.net/Lee_my_/article/details/79531282
问题: 用idea编译项目中java文件时候,提示
Error:(1, 1) java: 非法字符: ‘\ufeff’
Error:(1, 10) java: 需要class, interface或enum
原因: 编码不一致导致
解决方法: 右下角将UTF-8 convert 为GBK 然后再转换回来
但上面操作方法可能会造成控制台乱码,解决办法修改/Applications/IntelliJ IDEA.app/Contents/bin下面的idea.vmoptions
在末尾添加 -Dfile.encoding=UTF-8 重启idea 重新运行代码ok
https://www.runoob.com/w3cnote/java-json-instro.html
SON 对象与字符串的相互转化
方法 | 作用 |
---|---|
JSON.parseObject() | 从字符串解析 JSON 对象 |
JSON.parseArray() | 从字符串解析 JSON 数组 |
JSON.toJSONString(obj/array) | 将 JSON 对象或 JSON 数组转化为字符串 |
实例
//从字符串解析JSON对象
JSONObject obj = JSON.parseObject("{\"runoob\":\"教程\"}");
//从字符串解析JSON数组
JSONArray arr = JSON.parseArray("[\"教程\",\"RUNOOB\"]\n");
//将JSON对象转化为字符串
String objStr = JSON.toJSONString(obj);
//将JSON数组转化为字符串
String arrStr = JSON.toJSONString(arr);
public static String sbCommon(JSONObject json, int count) {
String currentTime = TimeTransfer.getCurrentTime();
// 读取的日志里,记录用户行为的时间clientTimeStamp
String clientTimeStamp = TimeTransfer.clientTimeStamp(json);
String appScene = json.getString("appScene");
String device = json.getString("device");
String systemInfo = json.getString("systemInfo");
System.out.println(systemInfo + ",systemInfo是字符串。。。");
// 把获取的json字符串转换为json对象,如 "trackInfoAppend": "{\"ok\":\"雷洛\",\"source_from\":\"home\",\"cn\":\"精选\"}",
JSONObject systemInfoJson = json.parseObject(systemInfo);
System.out.println(systemInfoJson + ",从字符串解析JSON对象。。。systemInfoJson是json对象。。。");
// 解析为json对象后再取值
String os = systemInfoJson.getString("os");
System.out.println(os + ",os为系统");
String version = json.getString("version");
String sbPrint = ",BUG BUG BUG!!!" + currentTime + "日" + clientTimeStamp + ",第【" + count + "】条数据," + "appScene为:【" + appScene + "】," +
"os为:【" + os + "】,device为:【" + device + "】,version为:【" + version + "】,=======origialParam的json内容为=======" + json;
// sbPrint为最终钉钉发送出的消息
// String sbPrint = sb + sbJoin;
return sbPrint;
}
idea for mac生成UML图
1.打开Preference-找到plugin
安装完成重启idea
点击File -New -UML sequence
如遇idea左侧结构、包 类消失,在顶部展示,可
使用idea有时候会遇到左侧栏的目录结构显示不出来的情况,这时候可以这样解决:
删除该项目根目录下的.idea文件夹;
重启idea即可看到目录结构。
亲测可用
Run Debug在顶部右侧去了,如何移动到左侧
View-Toolbar勾选上就行
待续。。。。