Java 导出谷歌 Chrome 浏览器所有已安装插件教程

mvn 依赖 <dependency> <groupId>com.googlecode.json-simple</groupId> <artifactId>json-simple</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.8.0</version> </dependency>原理很简单,获取 Chrome 浏览器插件默认存储位置,遍历出插件信息并批量复制插件到 下载 目录,可以在其它 Chrome 浏览器中以 加载已解压拓展程序 安装插件,适用于在 chrome 插件商城下载某插件,但 edge 或 360 等浏览器商城里没该插件,互联网第三方网站也没有,此时这种直接提取方式最方便,代码import java.io.File;import java.io.FileReader;import java.io.IOException;import java.nio.file.*;import java.util.Arrays;import java.util.Comparator;import java.util.List;import java.util.stream.Collectors;import org.apache.commons.io.FileUtils;import org.json.simple.JSONObject;import org.json.simple.parser.JSONParser;public class Main {public static void main(String[] args) throws IOException { // 获取 Windows 用户名 String username = System.getenv("USERNAME"); // 构建 Chrome 插件数据目录路径 String chromeExtensionsDir = "C:\\Users\\" + username + "\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Extensions"; System.out.println(chromeExtensionsDir); File extensionsDir = new File(chromeExtensionsDir); if (extensionsDir.exists() && extensionsDir.isDirectory()) {File[] extensionFolders = extensionsDir.listFiles((dir, name) -> name.length() == 32); if (extensionFolders != null) {for (File extensionFolder : extensionFolders) {String extensionId = extensionFolder.getName(); System.out.println("Processing extension with ID: " + extensionId); // 寻找最新修改的子文件夹 File latestSubFolder = findLatestSubFolder(extensionFolder); if (latestSubFolder != null) {String version = latestSubFolder.getName(); // 解析 manifest.json 文件 String pluginName = parseManifestForName(latestSubFolder); // 构建下载目录路径 String downloadDir = System.getenv("USERPROFILE") + "\\Downloads"; File downloadDirectory = new File(downloadDir); // 复制文件夹到下载目录// copyFolder(latestSubFolder, downloadDirectory, pluginName + "_" + version); CopyOption[] options = new CopyOption[]{ StandardCopyOption.REPLACE_EXISTING, // 替换已存在的文件 StandardCopyOption.COPY_ATTRIBUTES // 复制文件属性 }; String pluginFullName = pluginName.replace(" ", "") + "_" + version; System.out.println("pluginFullName: " + pluginFullName); FileUtils.copyDirectory(latestSubFolder, new File(downloadDirectory + "\\" + pluginFullName) , null, false, options); } } } } } private static File findLatestSubFolder(File folder) {File[] subFolders = folder.listFiles((dir, name) -> dir.isDirectory()); List<File> subFoldersList = Arrays.stream(subFolders) .filter(File::isDirectory) .collect(Collectors.toList()); for (File subFolder : subFoldersList) {System.out.println("version: " + subFolder.getName()); } if (!subFoldersList.isEmpty()) {return subFoldersList.stream() .max(Comparator.comparingLong(File::lastModified)) .orElse(null); } return null; } private static String parseManifestForName(File folder) {File manifestFile = new File(folder, "manifest.json"); JSONParser parser = new JSONParser(); try (FileReader reader = new FileReader(manifestFile)) {JSONObject jsonObject = (JSONObject) parser.parse(reader); String name = (String) jsonObject.get("name"); if (name.contains("MSG_")) { // 假设 action 是一个 JSONObject JSONObject actionObject = (JSONObject) jsonObject.get("action"); if (actionObject != null) { // 获取 default_title 字段值 String defaultTitle = (String) actionObject.get("default_title"); if (defaultTitle != null) {name = defaultTitle;} } } return name; } catch (IOException | org.json.simple.parser.ParseException e) {e.printStackTrace(); return null; } } private static void copyFolder(File sourceFolder, File targetDirectory, String newFolderName) {File newFolder = new File(targetDirectory, newFolderName); try {if (!newFolder.exists()) {boolean created = newFolder.mkdir(); if (!created) {System.out.println("Failed to create new folder: " + newFolderName); return; } } Files.walk(sourceFolder.toPath()) .sorted(Comparator.reverseOrder()) .forEach(path -> { try {Path targetPath = Paths.get(targetDirectory.getPath(), newFolderName, path.toString().substring(sourceFolder.getPath().length())); Files.copy(path, targetPath); } catch (IOException e) {e.printStackTrace(); } }); } catch (IOException e) {e.printStackTrace(); } }}

免费常用公共 API 接口地址

GitHub - public-apis/public-apis: A collective list of free APIs300k star,该仓库包含各种 API 接口信息,方便使用或测试。

免费编程助手 double,ChatGPT4,Claude3 免费用

打开 VS code,插件商店搜索“double”后安装,然后打开 vscode 侧边栏,将 double 拖动到侧边栏即可。登录可选择 github 登录,登录后可选 GPT4,Claude3 模型。

AI 正则表达式在线生成教程,一秒出正则

使用起来很简单,使用 Regex.ai 书写正则表达式,只需要三步:输入你的文本 找出你需要的数据(选中即可)点击生成,完毕官网:Regex.ai - Artificial Intelligence Regular Expression Generator来源:Regex.ai - 让 AI 帮你写正则表达式|再也不用学习正则了 - 小众软件

IDEA2022 最新版激活码

直接复制粘贴到 activation code 即可激活:F5TRIB85C7-eyJsaWNlbnNlSWQiOiJGNVRSSUI4NUM3IiwibGljZW5zZWVOYW1lIjoiU2hhbmRvbmcgVW5pdmVyc2l0eSIsImFzc2lnbmVlTmFtZSI6ImFvIGxpIiwiYXNzaWduZWVFbWFpbCI6IjI4Njc4MTYyNjhAcXEuY29tIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiRm9yIGVkdWNhdGlvbmFsIHVzZSBvbmx5IiwiY2hlY2tDb25jdXJyZW50VXNlIjpmYWxzZSwicHJvZHVjdHMiOlt7ImNvZGUiOiJEUE4iLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IkRCIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJQUyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiSUkiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlJTQyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJHTyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiRE0iLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlJTRiIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJEUyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUEMiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlJDIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJDTCIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiV1MiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlJEIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJSUzAiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlJNIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJBQyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUlNWIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IkRDIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJSU1UiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IkRQIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBEQiIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQV1MiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUFNJIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBQUyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQQ1dNUCIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQR08iLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUFBDIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBSQiIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQU1ciLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUlMiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6dHJ1ZX1dLCJtZXRhZGF0YSI6IjAxMjAyMjA3MTVMUEFBMDA2MDA4IiwiaGFzaCI6IjMzMjc1MzQ1LzE2OTgzMDkyOjE3NTA1Njk2NTMiLCJncmFjZVBlcmlvZERheXMiOjcsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-EOufLPiykodPlQXl6v9pAd7geesvSLDca88HhDihCP5LSabX33BwTVfkSQaLUah0qyH84Shzp2NZv+LZK2dTXwwF1XCYq/9Lmt3iwlFovsrifhrfTGQCEXrlyzigZdwl+cpKysVKS9DdVKQIl64L0xQkX1ZrjOhofWUMFrgNwqie1xNn9iSSnbh/NiZ0/b7kdfMukFX995RFNkPMCvqwrGpNLFHnPoiEGqIKCh+2o8YQaO7AxPHckOLZLAF+l5dIkiM7tFdICOBT/GCEEPXG2CsVoufNvGmkdSUPr6j6+EuMAv+0iBscxQrkjfqH3wED6jXR9Pjl/+6OGaT6T4YhJg==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDCP4uk4SlVdA5nuA3DQC+NsEnZS9npFnO0zrmMWcz1++q2UWJNuGTh0rwi+3fUJIArfvVh7gNtIp93rxjtrQAuf4/Fa6sySp4c32MeFACfC0q+oUoWebhOIaYTYUxm4LAZ355vzt8YeDPmvWKxA81udqEk4gU9NNAOz1Um5/8LyR8SGsSc4EDBRSjcMWMwMkYSauGqGcEUK8WhfplsyF61lKSOFA6VmfUmeDK15rUWWLbOMKgn2cxFA98A+s74T9Oo96CU7rp/umDXvhnyhAXSukw/qCGOVhwKR8B6aeDtoBWQgjnvMtPgOUPRTPkPGbwPwwDkvAHYiuKJ7Bd2wH7rAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBAB2J1ysRudbkqmkUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/wi9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD2018.1 以下旧版本:F5TRIB85C7-eyJsaWNlbnNlSWQiOiJGNVRSSUI4NUM3IiwibGljZW5zZWVOYW1lIjoiU2hhbmRvbmcgVW5pdmVyc2l0eSIsImFzc2lnbmVlTmFtZSI6ImFvIGxpIiwiYXNzaWduZWVFbWFpbCI6IjI4Njc4MTYyNjhAcXEuY29tIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiRm9yIGVkdWNhdGlvbmFsIHVzZSBvbmx5IiwiY2hlY2tDb25jdXJyZW50VXNlIjpmYWxzZSwicHJvZHVjdHMiOlt7ImNvZGUiOiJEUE4iLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJEQiIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IlBTIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4In0seyJjb2RlIjoiSUkiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJSU0MiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJHTyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IkRNIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4In0seyJjb2RlIjoiUlNGIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4In0seyJjb2RlIjoiRFMiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJQQyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IlJDIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4In0seyJjb2RlIjoiQ0wiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJXUyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IlJEIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4In0seyJjb2RlIjoiUlMwIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4In0seyJjb2RlIjoiUk0iLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJBQyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IlJTViIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IkRDIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4In0seyJjb2RlIjoiUlNVIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4In0seyJjb2RlIjoiRFAiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJQREIiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJQV1MiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJQU0kiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJQUFMiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJQQ1dNUCIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IlBHTyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IlBQQyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IlBSQiIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IlBTVyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IlJTIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4In1dLCJoYXNoIjoiMzMyNzUzNDUvMTY5ODMwOTI6MTc1MDU2OTY1MyIsImdyYWNlUGVyaW9kRGF5cyI6NywiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlfQ==-lY3tKc+4E4dJpJFSL5ToHqXgZz/E0Q6cALc9DVk+z7E7wJbeFD+TkvcDnzdVpOG8oiCGPlpeqqJHpC8nuLd9yUY2XV0JHHwuhBmtl4iQcqeEo4tHc+SJwkhkChgYfNqzvVb2Vxm868Pd72ZRnabPmzzyheihWNbpqQTHOXc2LLJP5BGhJ3wZRl9m60iG6daqMvA0nvAc/hrdD22657O1kwwct125rfCBgvU1HnE8Abv/gDDZXxNQdhT9pUaNUAiWBmTRC3+kYAUR8jMBl6tJNZrPeLbCXmUpmku2pMjgjUb5VDBnd7SIJEBQB2CILoO1ASWzWJ/hzEnHYnZ8YzXTdQ==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDCP4uk4SlVdA5nuA3DQC+NsEnZS9npFnO0zrmMWcz1++q2UWJNuGTh0rwi+3fUJIArfvVh7gNtIp93rxjtrQAuf4/Fa6sySp4c32MeFACfC0q+oUoWebhOIaYTYUxm4LAZ355vzt8YeDPmvWKxA81udqEk4gU9NNAOz1Um5/8LyR8SGsSc4EDBRSjcMWMwMkYSauGqGcEUK8WhfplsyF61lKSOFA6VmfUmeDK15rUWWLbOMKgn2cxFA98A+s74T9Oo96CU7rp/umDXvhnyhAXSukw/qCGOVhwKR8B6aeDtoBWQgjnvMtPgOUPRTPkPGbwPwwDkvAHYiuKJ7Bd2wH7rAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBAB2J1ysRudbkqmkUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/wi9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD

JDK 国内高速下载镜像

官网下载:Java Downloads | OracleJdk 几个高速下载镜像 编程宝库:JDK 下载 - 编程宝库 华为:Index of java-local/jdkINJDK:Java I tell you- 爪哇我话你知 liferay(国外):Index of /mirrors/download.oracle.com/otn-pub/java/jdk

Github 文件下载加速教程

下载加速网址:https://ghproxy.com/https://mirror.ghproxy.com/https://gh.api.99988866.xyz/ 项目主页:https://github.com/hunshcn/gh-proxy 镜像: 尝试将网址中“github.com”替换为以下镜像站:hub.fastgit.org,github.com.cnpmjs.org,hub.fastgit.xyz

IDEA 激活服务器,JB 产品通用

打开:https://search.censys.io/ 输入如下搜索:services.http.response.headers.location: account.jetbrains.com/fls-auth 在返回的结果随便找一个点进去,查找到 HTTP/302,复制 URL 到 JB,选择许可证服务器 License server,粘贴刚刚复制的网址,激活即可。ps:绝大部分都无法使用,需一个个测试,建议购买正版软件。

Java 开源博客 Halo Blog

算是最近看到的小清新的一款博客了,功能简洁,支持安装多种主题,可以作为个人博客不错的选择。详情见 官网:Halo 文档:Halo Documents 另外之前也介绍过其他开源 Java 博客,感兴趣可以试试:B3log - 平等•自由•奔放的开源社区。目前 B3log 已经开源了多款产品:Sym、Solo、Pipe、Vditor、Lute、思源笔记等,欢迎大家加入,贡献开源。otale/tale: 🦄 Best beautiful java blog, worth a try

无数据库启动 SpringBoot

无数据库启动 SpringBoot平常写些小的 springboot 在线工具,但是并不需要数据库,此时启动会发现项目启动不了咯,提示 If you want an embedded database... 等报错,要求你配置数据库,解决方法很简单,启动类上加注解即可: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})