jar包瘦身

This commit is contained in:
2026-06-10 10:45:52 +08:00
parent a9c916efb1
commit 2137b938d6
12 changed files with 658 additions and 70 deletions

View File

@@ -1,24 +1,20 @@
package com.codechecker.common;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
/**
* 企微 Markdown 发送(与具体变更类型解耦)。
*/
public class WeComMarkdownSender {
private static final int MAX_LENGTH = 3800;
private static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
private final OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
private final HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.build();
public boolean send(String webhookUrl, String content) {
@@ -41,15 +37,26 @@ public class WeComMarkdownSender {
String payload = "{\"msgtype\":\"markdown\",\"markdown\":{\"content\":"
+ jsonEscape(content) + "}}";
Request request = new Request.Builder()
.url(webhookUrl)
.post(RequestBody.create(payload, JSON))
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(webhookUrl))
.timeout(Duration.ofSeconds(10))
.header("Content-Type", "application/json; charset=utf-8")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful() && response.body() != null) {
return response.body().string().contains("\"errcode\":0");
try {
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
int statusCode = response.statusCode();
if (statusCode >= 200 && statusCode < 300) {
String body = response.body();
return body != null && body.contains("\"errcode\":0");
}
System.out.println("[错误] 企微返回异常: " + response.code());
String body = response.body();
System.out.println("[错误] 企微返回异常: " + statusCode
+ (body != null ? " " + body : ""));
return false;
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
System.out.println("[错误] 发送企微消息失败: " + e.getMessage());
return false;
} catch (IOException e) {
System.out.println("[错误] 发送企微消息失败: " + e.getMessage());

View File

@@ -1,18 +1,12 @@
package com.codechecker.notify;
import com.codechecker.common.WeComMarkdownSender;
import com.codechecker.model.ApiEndpoint;
import com.codechecker.model.ClassChangeReport;
import com.codechecker.model.ClassType;
import com.codechecker.model.FieldChange;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* 将 ClassChangeReport 渲染为企业微信 Markdown 并发送(或仅日志输出)。
@@ -22,12 +16,8 @@ import java.util.concurrent.TimeUnit;
*/
public class WeComNotifier {
private static final int MAX_LENGTH = 3800;
private static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
private final OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.build();
private final WeComMarkdownSender sender = new WeComMarkdownSender();
/** 逐条发送企微通知,返回成功条数 */
public int sendAll(String webhookUrl, List<ClassChangeReport> reports, String modifier, String modifyTime) {
@@ -347,31 +337,7 @@ public class WeComNotifier {
/** POST 企微 Webhookmarkdown v1 */
private boolean postMarkdown(String webhookUrl, String content) {
if (webhookUrl == null || webhookUrl.isBlank() || webhookUrl.contains("YOUR_WECOM")) {
System.out.println("[警告] 未配置有效的企业微信 Webhook URL");
System.out.println("--- 通知预览 ---");
System.out.println(content.length() > 1000 ? content.substring(0, 1000) : content);
return false;
}
String payload = "{\"msgtype\":\"markdown\",\"markdown\":{\"content\":"
+ jsonEscape(content) + "}}";
Request request = new Request.Builder()
.url(webhookUrl)
.post(RequestBody.create(payload, JSON))
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful() && response.body() != null) {
String body = response.body().string();
return body.contains("\"errcode\":0");
}
System.out.println("[错误] 企微返回异常: " + response.code()
+ (response.body() != null ? " " + response.body().string() : ""));
return false;
} catch (IOException e) {
System.out.println("[错误] 发送企微消息失败: " + e.getMessage());
return false;
}
return sender.send(webhookUrl, content);
}
/** 超长消息截断(企微上限 4096 字节 UTF-8 */
@@ -382,13 +348,4 @@ public class WeComNotifier {
return text.substring(0, MAX_LENGTH) + "\n\n... 消息过长,已截断";
}
/** JSON 字符串转义 */
private String jsonEscape(String text) {
String escaped = text
.replace("\\", "\\\\")
.replace("\"", "\\\"")
.replace("\n", "\\n")
.replace("\r", "");
return "\"" + escaped + "\"";
}
}