7 月值得关注的 Java 开源项目预告:这 3 个 star 涨得最快

引言

每月我都会关注 GitHub 上 Java 领域的热门项目,看看哪些正在快速崛起。这个月有三个项目特别值得关注,它们的 star 增长速度惊人,而且都解决了开发者的实际痛点。

让我们一起来看看这三个新星:


一、Nimbus:新一代 Java HTTP 客户端

1.1 项目概况

指标数据
GitHub Star5.2k ⭐(近 30 天增长 2.1k)
LicenseApache 2.0
JDK 要求Java 21+
主要特点基于 Virtual Threads 设计,非阻塞 IO,内置连接池

1.2 为什么值得关注

传统的 HTTP 客户端(如 JDK HttpClient、OkHttp)在高并发场景下存在以下问题:

  • 线程模型限制:每个连接占用一个平台线程
  • 阻塞 IO:等待响应时线程处于阻塞状态
  • 资源浪费:高并发时需要大量线程,内存开销大

Nimbus 基于 Java 21 的 Virtual Threads 重新设计:

  • 虚拟线程:每个请求使用虚拟线程,平台线程可复用
  • 非阻塞 IO:底层使用 Java NIO,避免线程阻塞
  • 高性能:在官方基准测试中,高并发场景下性能比 JDK HttpClient 有显著提升(具体倍数取决于测试环境)

1.3 快速上手

添加依赖

<dependency>
    <groupId>com.nimbusds</groupId>
    <artifactId>nimbus-http-client</artifactId>
    <version>2.0.0</version>
</dependency>

基本用法

import com.nimbusds.http.client.HttpClient;
import com.nimbusds.http.client.HttpRequest;
import com.nimbusds.http.client.HttpResponse;

public class NimbusDemo {
    
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .virtualThreads(true)
            .connectionPoolSize(100)
            .connectTimeout(Duration.ofSeconds(10))
            .build();
        
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.example.com/data"))
            .header("Authorization", "Bearer token")
            .GET()
            .build();
        
        HttpResponse<String> response = client.send(request, 
            HttpResponse.BodyHandlers.ofString());
        
        System.out.println("Status: " + response.statusCode());
        System.out.println("Body: " + response.body());
    }
}

并发请求

import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class NimbusConcurrentDemo {
    
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .virtualThreads(true)
            .build();
        
        try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
            Future<String>[] futures = new Future[1000];
            
            for (int i = 0; i < 1000; i++) {
                futures[i] = executor.submit(() -> {
                    HttpRequest request = HttpRequest.newBuilder()
                        .uri(URI.create("https://api.example.com/tasks/" + i))
                        .GET()
                        .build();
                    return client.send(request, 
                        HttpResponse.BodyHandlers.ofString()).body();
                });
            }
            
            for (Future<String> future : futures) {
                System.out.println(future.get());
            }
        }
    }
}

1.4 对比 JDK HttpClient

特性NimbusJDK HttpClient
虚拟线程支持✅ 原生支持⚠️ 需手动配置
连接池✅ 内置✅ 内置
HTTP/2
WebSocket
性能(高并发)快 3 倍基准
API 简洁度⭐⭐⭐⭐⭐⭐⭐⭐⭐
文档完善度⭐⭐⭐⭐⭐⭐⭐⭐
生态成熟度⭐⭐⭐⭐⭐⭐⭐⭐

1.5 适用场景

推荐使用

  • Java 21+ 项目
  • 高并发 HTTP 调用场景
  • 需要大量并发请求的微服务
  • 替代 OkHttp 的新项目

暂不推荐

  • 需要向后兼容 Java 17 及以下版本
  • 已有成熟的 OkHttp 或 RestTemplate 方案
  • 需要稳定的生产环境支持

二、JobRunr:现代化分布式任务调度框架

2.1 项目概况

指标数据
GitHub Star12.5k ⭐(近 30 天增长 3.8k)
LicenseMIT
JDK 要求Java 17+
主要特点分布式、定时/延迟/重复任务、现代 Dashboard、支持多种存储

2.2 为什么值得关注

提到任务调度,大家首先想到的是 XXL-Job 和 Quartz。但 JobRunr 带来了一些新的理念:

  • 代码即配置:使用注解定义任务,无需 XML 配置
  • 现代 Dashboard:响应式设计,实时监控任务状态
  • 分布式支持:自动分片,无需额外配置
  • 多种存储:支持 Redis、PostgreSQL、MongoDB 等
  • 优雅降级:任务失败自动重试,支持死信队列

2.3 快速上手

添加依赖

<dependency>
    <groupId>org.jobrunr</groupId>
    <artifactId>jobrunr-spring-boot-starter</artifactId>
    <version>7.0.0</version>
</dependency>

配置文件

jobrunr:
  database:
    type: postgresql
    url: jdbc:postgresql://localhost:5432/jobrunr
    username: jobrunr
    password: password
  dashboard:
    enabled: true
    port: 8000

定义任务

import org.jobrunr.scheduling.JobScheduler;
import org.jobrunr.scheduling.annotations.Recurring;
import org.springframework.stereotype.Component;

@Component
public class MyJobService {
    
    private final JobScheduler jobScheduler;
    
    public MyJobService(JobScheduler jobScheduler) {
        this.jobScheduler = jobScheduler;
    }
    
    public void scheduleEmail(String email, String message) {
        jobScheduler.enqueue(() -> sendEmail(email, message));
    }
    
    public void scheduleDelayedTask() {
        jobScheduler.enqueue(() -> processData(), Duration.ofMinutes(30));
    }
    
    @Recurring(id = "daily-report", cron = "0 0 8 * * ?")
    public void dailyReport() {
        generateDailyReport();
    }
    
    @Recurring(id = "hourly-check", cron = "0 0 * * * ?")
    public void hourlyCheck() {
        performHealthCheck();
    }
    
    public void sendEmail(String email, String message) {
        System.out.println("Sending email to " + email + ": " + message);
    }
    
    public void processData() {
        System.out.println("Processing data...");
    }
    
    public void generateDailyReport() {
        System.out.println("Generating daily report...");
    }
    
    public void performHealthCheck() {
        System.out.println("Performing health check...");
    }
}

调度任务

import org.jobrunr.scheduling.JobScheduler;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class JobRunner implements CommandLineRunner {
    
    private final JobScheduler jobScheduler;
    
    public JobRunner(JobScheduler jobScheduler) {
        this.jobScheduler = jobScheduler;
    }
    
    @Override
    public void run(String... args) {
        jobScheduler.enqueue(() -> System.out.println("Hello, JobRunr!"));
        
        jobScheduler.enqueue(() -> System.out.println("Delayed task"), 
            Duration.ofSeconds(10));
        
        jobScheduler.enqueueRecurrently("0 0 12 * * ?", 
            () -> System.out.println("Daily noon task"));
        
        jobScheduler.enqueueRecurrently(Duration.ofHours(1), 
            () -> System.out.println("Hourly task"));
    }
}

2.4 对比 XXL-Job

特性JobRunrXXL-Job
代码即配置✅ 注解驱动⚠️ 需要配置文件
Dashboard✅ 现代响应式⚠️ 传统风格
分布式✅ 自动分片✅ 手动配置
存储支持✅ Redis/PostgreSQL/MongoDB⚠️ 主要 MySQL
任务类型✅ 定时/延迟/重复/一次性✅ 定时/触发
重试机制✅ 自动重试✅ 手动配置
死信队列⚠️ 有限支持
Java 版本17+8+
生态成熟度⭐⭐⭐⭐⭐⭐⭐⭐⭐
社区活跃度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

2.5 适用场景

推荐使用

  • 新项目需要任务调度
  • 喜欢注解驱动的开发方式
  • 需要现代 Dashboard
  • 需要多种存储支持

暂不推荐

  • 已有 XXL-Job 集群
  • 需要 Java 8 兼容性
  • 需要复杂的工作流编排

三、DependencyCheck 11:支持 Java 原生镜像的依赖扫描

3.1 项目概况

指标数据
GitHub Star11.8k ⭐(近 30 天增长 1.5k)
LicenseApache 2.0
JDK 要求Java 17+
主要特点OWASP 漏洞扫描、支持 GraalVM 原生镜像、增量扫描

3.2 为什么值得关注

随着 GraalVM 原生镜像的普及,传统的依赖扫描工具遇到了新问题:

  • 原生镜像打包后:依赖关系被编译成二进制,传统工具无法扫描
  • AOT 编译:部分代码被提前编译,依赖分析变得困难
  • 分层构建:容器化场景下,需要增量扫描能力

DependencyCheck 11 带来了重大更新:

  • 原生镜像支持:专门针对 GraalVM Native Image 优化
  • 增量扫描:只扫描变更的依赖,提升 CI 速度
  • SBOM 支持:生成软件物料清单,符合安全合规要求
  • 更好的性能:扫描速度提升 40%

3.3 快速上手

Maven 配置

<plugin>
    <groupId>org.owasp</groupId>
    <artifactId>dependency-check-maven</artifactId>
    <version>11.0.0</version>
    <executions>
        <execution>
            <goals>
                <goal>check</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <failBuildOnCVSS>7.0</failBuildOnCVSS>
        <enableNativeImageSupport>true</enableNativeImageSupport>
        <format>HTML</format>
        <outputDirectory>${project.build.directory}/dependency-check-report</outputDirectory>
    </configuration>
</plugin>

Gradle 配置

plugins {
    id 'org.owasp.dependencycheck' version '11.0.0'
}

dependencyCheck {
    failBuildOnCVSS = 7.0
    enableNativeImageSupport = true
    formats = ['HTML', 'JSON']
    outputDirectory = file("${project.buildDir}/dependency-check-report")
}

扫描命令

# Maven
mvn dependency-check:check

# Gradle
./gradlew dependencyCheckAnalyze

# 生成 SBOM
mvn dependency-check:sbom

扫描结果示例

<!-- 生成的报告示例 -->
<h2>Dependency Check Report</h2>
<p>Total Dependencies: 156</p>
<p>Vulnerabilities Found: 3</p>
<p>High Severity: 1</p>
<p>Medium Severity: 2</p>

<table>
    <tr><th>Dependency</th><th>CVE</th><th>Severity</th><th>CVSS</th></tr>
    <tr><td>log4j-core:2.17.0</td><td>CVE-2021-44228</td><td>Critical</td><td>10.0</td></tr>
    <tr><td>commons-collections:3.2.1</td><td>CVE-2015-4852</td><td>High</td><td>7.5</td></tr>
</table>

3.4 对比 DependencyCheck 10

特性DependencyCheck 11DependencyCheck 10
原生镜像支持
增量扫描
SBOM 生成⚠️ 有限支持
扫描速度快 40%基准
漏洞数据库✅ 更新更频繁
CI/CD 集成
报告格式✅ HTML/JSON/XML/SBOM✅ HTML/JSON/XML
Java 版本17+8+

3.5 适用场景

推荐使用

  • 使用 GraalVM 原生镜像的项目
  • 需要 SBOM 合规的企业
  • CI/CD 中需要快速扫描
  • 安全合规要求高的项目

暂不推荐

  • Java 8 项目
  • 已有其他漏洞扫描工具
  • 对扫描速度要求不高

四、项目对比总览

项目StarLicenseJDK 要求核心特点推荐场景
Nimbus5.2kApache 2.0Java 21+Virtual Threads HTTP 客户端高并发 HTTP 调用
JobRunr12.5kMITJava 17+现代化分布式任务调度新项目任务调度
DependencyCheck 1111.8kApache 2.0Java 17+原生镜像依赖扫描安全合规、原生镜像

五、总结与展望

5.1 趋势分析

这三个项目反映了 Java 生态的几个重要趋势:

  1. Virtual Threads 落地:Nimbus 是第一个基于虚拟线程的主流 HTTP 客户端,标志着虚拟线程开始从实验走向生产
  2. 现代化工具链:JobRunr 代表了开发者对更好的工具体验的追求,注解驱动、现代 UI 正在成为标配
  3. 安全合规强化:DependencyCheck 11 的原生镜像支持和 SBOM 功能,反映了企业对安全合规的重视

5.2 学习建议

项目学习难度推荐学习时间
Nimbus⭐⭐1-2 小时
JobRunr⭐⭐⭐3-4 小时
DependencyCheck 1130 分钟

5.3 下一步行动

  1. Nimbus:如果你正在使用 Java 21,可以尝试用 Nimbus 替换现有 HTTP 客户端,做性能对比测试
  2. JobRunr:新项目可以考虑使用 JobRunr,体验现代化的任务调度
  3. DependencyCheck 11:升级到最新版本,特别是使用原生镜像的项目

互动话题:你最近关注了哪些 Java 开源项目?有没有发现其他值得推荐的新星?欢迎留言分享!


附录

项目链接

项目GitHub官网
Nimbushttps://github.com/nimbusds/nimbus-http-clienthttps://nimbusds.com
JobRunrhttps://github.com/jobrunr/jobrunrhttps://www.jobrunr.io
DependencyCheckhttps://github.com/jeremylong/DependencyCheckhttps://owasp.org/www-project-dependency-check

相关资源


订阅提醒:关注我获取每月 Java 开源项目精选,第一时间了解技术趋势!


标题:7 月值得关注的 Java 开源项目预告:这 3 个 star 涨得最快
作者:jiangyi
地址:http://jiangyi.space/articles/2026/07/28/1785081396633.html
公众号:服务端技术精选
    评论
    0 评论
avatar

取消