在 Maven 项目中使用 Spotbugs Plugin 检查 Java 代码(字节码)质量

本文记录了如何在 Maven 项目中使用 SpotBugs Maven Plugin 检查代码(字节码)质量 一个 Maven 项目 假设我有一个 Maven 项目,这个项目包含若干子模块。根目录的 pom.xml 看起来如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>my</groupId> <artifactId>my-project</artifactId> <version>${revision}</version> <packaging>pom</packaging> <properties> <revision>0.1.0-SNAPSHOT</revision> </properties> <modules> <module>module-dependencies</module> <module>module-bar</module> <module>module-foo</module> </modules> </project> 在根项目 pom.xml 中增加 spotbugs-maven-plugin 插件 增加 spotbugs-maven-plugin 插件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>my</groupId> <artifactId>my-project</artifactId> <version>${revision}</version> <packaging>pom</packaging> <properties> <spotbugs-maven-plugin.version>4.7.1.1</spotbugs-maven-plugin.version> </properties> <modules> <module>module-dependencies</module> <module>module-bar</module> <module>module-foo</module> </modules> <build> <pluginManagement> <plugins> <plugin> <groupId>com.

Read more

在 Maven 多模块项目中使用 JaCoCo 检查测试覆盖率

本文记录了如何在 Maven 多模块项目中使用 JaCoCo 生成覆盖率报告并推送到 Sonar 中 一个多模块项目 假设我有一个多模块项目,这个项目包含若干子模块,并且有若干测试用例。根目录的 pom.xml 看起来如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>my</groupId> <artifactId>my-project</artifactId> <version>${revision}</version> <packaging>pom</packaging> <properties> <revision>0.1.0-SNAPSHOT</revision> </properties> <modules> <module>module-dependencies</module> <module>module-bar</module> <module>module-foo</module> </modules> </project> 关于 module-dependencies 模块的作用,可以查看我之前写的MAVEN PROJECTS BEST PRACTICES 在根项目 pom.xml 中增加 jacoco-maven-plugin 插件,并增加 module-coverage 模块 增加 jacoco-maven-plugin 插件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>my</groupId> <artifactId>my-project</artifactId> <version>${revision}</version> <packaging>pom</packaging> <properties> <jacoco-maven-plugin.version>0.8.6</jacoco-maven-plugin.version> </properties> <modules> <module>module-dependencies</module> <module>module-bar</module> <module>module-foo</module> <module>module-coverage</module> </modules> <build> <pluginManagement> <plugins> <plugin> <groupId>org.

Read more

Backup SSH KEY

将 ~/.ssh/下的所有文件迁移到新的机器上,然后在新的机器上执行 chmod 600 ~/.ssh/*

Apache Servicecomb Pack Release Guide

发布环境准备 生成签名密钥 安装 GPG 在GnuPG官网下载 2.X 安装包. 安装完毕后可以使用如下命令查看版本 $ gpg --version gpg (GnuPG/MacGPG2) 2.2.20 libgcrypt 1.8.5 Copyright (C) 2020 Free Software Foundation, Inc. 配置 GPG 安装完毕后你可以找到 $HOME/.gnupg/gpg.conf 文件,并增加如下推荐配置 personal-digest-preferences SHA512 cert-digest-algo SHA512 default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed 用 GPG 生成密钥 根据提示使用 ASF 邮箱生成 GPG 的密钥,更多详细说明请参考 Generate Key with GPG $ gpg --full-gen-key gpg (GnuPG/MacGPG2) 2.2.34; Copyright (C) 2022 g10 Code GmbH This is free software: you are free to change and redistribute it.

Read more

Awesome Git Aliases

我们可以通过别名定义简化命令输出,创造自己的命令 打开 ~/.gitconfig 文件您可以看到如下片段,在这个片段中我们可以为已有命令定义别名 [alias] 例如我们创建分支是需要使用 git branch -b xxx 命令,那么我们可以将 branch 简化为 br。我们只需要增加如下配置 [alias] br = branch 这是我自己常用的配置 [alias] ci = commit -a co = checkout cob = checkout -b cl = clone st = status br = branch mr = merge cp = cherry-pick hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short type = cat-file -t dump = cat-file -p sync-up = !git fetch upstream && git checkout $1 && git rebase upstream/$1 && git push origin $1 && :

Awesome Git Hooks

commit-msg #!/bin/sh red='\033[0;31m' green='\033[0;32m' no_color='\033[0m' commit_msg_file="$1" commit_msg=$(cat "$commit_msg_file") max_length=50 if [ ${#commit_msg} -gt $max_length ]; then echo "${red}信息长度不能超过50!${no_color}" exit 1 fi if [ "" = "$(grep -E '^(\[(fix|feat)\]:\[.*]\[.*\]|\[(docs|style|ref|test|chore|tag|revert|perf)\]:\[.*\])$' $1)" ]; then echo "${red}ERROR:${no_color} 你的提交描述格式错误, 请参考如下样例:" echo "${green}[feat]:[单号][新增XXXX]" echo "[feat]:[][新增XXXX]" echo "[fix]:[CRMAIF_ISSUE_XXX][修改/修复XXXX]" echo "[fix]:[][修改/修复XXXX]" echo "[docs]:[单号][新增/修订/删除XXXX]" echo "[docs]:[新增/修订/删除XXXX]" echo "[style]:[调整XX页XX格式]" echo "[ref]:[重构XXXX]" echo "[test]:[测试XXXX]" echo "[chore]:[构建/变动XXXX]" echo "[tag]:[版本XXXX]" echo "[revert]:[撤销/回退XXXX]" echo "[perf]:[性能优化XXXX]${no_color}" exit 1 fi pre-commit #!/bin/sh red='\033[0;31m' green='\033[0;32m' no_color='\033[0m' USERNAME=$(git config user.

Read more

My Favorite Software

开发者工具 IntelliJ IDEA Java 开发集成环境 WebStorm Web 开发集成环境 Atom GitHub 推出的开源编辑器 VS Code DataGrip 数据库客户端工具 JProfiler JVM 性能分析工具 (收费) VisualVM JVM 性能分析工具 Dash 离线 API 文档软件 Sublime Text 4 命令行 iTrem2 终端工具 浏览器 Google Chrome 工具 The Unarchiver 解压许多不同种类的归档压缩文件 Android File Transfer Android 文件传输工具 密码 LastPass 多终端密码管理 GPG Suite GPG 加密工具 语言 Grammarly 语法修正 通信 微信 腾讯会议 邮件 Apple Email MacOS 自带 办公 WPS Office 笔记 Github Pages Typora Mackdown 编辑器 1.

Read more

Java Performance Profiling Using Flame Graphs

JDK 有很多性能测量工具 JConsole、VisualVM、HPROF 等。它们中的大多数将应用程序作为一个整体进行分析,并且需要一些繁琐的分析过程能到分析出类或方法级别的热点。 当我试图评估我们的一个服务的性能时,可以通过 CPU 火焰图的方法,它在找出代码的 CPU 使用率方面非常有效。 这篇文章记录了我在对投递服务进行基准测试时发现的性能问题,以及通过 CPU 火焰图找到热点方法并改进的调优过程。 要求 如果你使用 IntelliJ IDEA Ultimate ,那么这个 IDE 自带一个火焰图工具 Async Profiler 如果你要在生产环境生成火焰图,你可以借助这个工具 火焰图生成工具 async-profiler 场景 这一切源于一个基准测试。通常我们在交付一个产品前需要对这个服务进行基准测试。并通过基准测试结果得出在某些硬件基准下我们服务的性能指标,最终通过这些指标你可以回答用户提出的容量要求。 投递服务: 这个服务负责从客户端接收消息,放入待发送队列,并持久化到数据库中。然后立即返回给客户端。为了准确额模拟客户端我为此编写了一个基准测试客户端程序。 经过多轮基准测试,我们找到单机服务下了吞吐率最佳的参数,并得到了最佳吞吐率 QPS 769 总计发送 10000 笔业务 50 并发; Welcome to the Notifier CLI 4.8.0 Type 'help' for help. notifier>benchmark -T 123123 -n 10000 -c 50 -w 10 Benchmarking ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ Warm Up 10 Concurrency Level 50 Time taken for tests 13 seconds Complete requests 10000 Failed requests 5000 Refused requests 0 Requests per second 769 [#/sec] Time per request 67 [ms] Percentage of the requests served within a certain time (ms) 50% 46.

Read more

Docker IPv6 Support

本文介绍在 IPv6 网络主机上部署 Docker 主机 IPv6 网络检查 使用 ifconfig 命令查看是否已经配置了 IPv6 网络 $ ifconfig eth1 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.252.248.152 netmask 255.255.255.128 broadcast 10.252.248.255 inet6 2409:8010:5ac0:400:200::2d prefixlen 128 scopeid 0x0<global> inet6 fe80::f816:3eff:fe84:bc36 prefixlen 64 scopeid 0x20<link> ether fa:16:3e:84:bc:36 txqueuelen 1000 (Ethernet) RX packets 7150695 bytes 4751783652 (4.4 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 5018420 bytes 4436770306 (4.1 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 你可以看到主机已经获取到了 IPv6 地址 inet6 2409:8010:5ac0:400:200::2d 注意: fe80:: 开头的地址只是链接本地地址 分别在主机和其他主机使用 ping6 命令验证网络是否可达

Read more

Linux Command - Memory

Linux 内存相关命令 查看系统内存 # free -h total used free shared buff/cache available Mem: 251G 40G 1.4G 4.0G 209G 206G Swap: 4.0G 3.7G 312M 内存占用 TOP N # ps aux | sort -k4,4nr | head -n 5 200 139348 227 6.9 38668500 18410776 ? Ssl 3月10 1905:49 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-2.el8_3.x86_64/jre/bin/java...org.sonatype.nexus.karaf.NexusMain mysql 33407 1.2 2.2 349722012 6012524 ? Sl 2021 4596:18 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql mysql 118257 0.4 0.5 10170064 1536084 ? Ssl 2月28 66:04 /usr/share/elasticsearch/jdk/bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC root 42564 9.

Read more