Getting Started
Add the dependency
<dependency>
<groupId>io.mvnpm</groupId>
<artifactId>raclette</artifactId>
<version>0.1.0.CR2</version>
</dependency>
Check a single URL
The simplest way to use Raclette - check one link:
import io.mvnpm.raclette.Raclette;
import io.mvnpm.raclette.types.Status;
try (Raclette raclette = Raclette.builder().build()) {
Status status = raclette.check("https://example.com");
if (status.isSuccess()) {
System.out.println("Link is valid!");
}
}
Build a custom client
The builder is highly customizable:
try (Raclette raclette = Raclette.builder()
.maxRetries(3)
.timeout(Duration.ofSeconds(10))
.userAgent("my-app/1.0")
.excludeAllPrivate(true)
.excludes(".*example\\.com.*")
.build()) {
Status status = raclette.check("https://github.com");
assert status.isSuccess();
}
All options set on the builder apply to every link check. See Configuration for the full list.
Collect and check links from HTML
For checking all links in an HTML document, use the Collector to extract links, then check each one:
import io.mvnpm.raclette.Raclette;
import io.mvnpm.raclette.collector.Collector;
import io.mvnpm.raclette.collector.Input;
import io.mvnpm.raclette.types.Status;
import io.mvnpm.raclette.types.Uri;
String html = """
<html>
<a href="https://github.com">GitHub</a>
<a href="https://example.com/broken">Broken</a>
</html>""";
Set<Uri> links = Collector.builder()
.build()
.collectLinks(Set.of(new Input.StringContent(html)));
try (Raclette raclette = Raclette.builder().build()) {
for (Uri uri : links) {
Status status = raclette.check(uri);
if (status.isError()) {
System.out.println("Broken: " + uri);
}
}
}
Check a local directory
Check all HTML files in a directory - perfect for generated sites:
Set<Uri> links = Collector.builder()
.build()
.collectLinks(Set.of(new Input.FsPath(Path.of("target/site"))));
try (Raclette raclette = Raclette.builder().build()) {
for (Uri uri : links) {
Status status = raclette.check(uri);
System.out.println(uri + " -> " + status);
}
}
Check a static site (SSG)
For generated static sites (Hugo, Jekyll, Roq, etc.), use StaticSiteChecker - it handles localhost URL rewriting, base path stripping, and parallel execution:
import io.mvnpm.raclette.checker.StaticSiteChecker;
import io.mvnpm.raclette.types.Status;
import io.mvnpm.raclette.types.Uri;
// Zero-config: check all links in a generated site
Map<Uri, Status> broken = StaticSiteChecker.check(Path.of("target/site"));
// With options: base path, remote link checking, etc.
Map<Uri, Status> broken = StaticSiteChecker.builder()
.path(Path.of("target/site"))
.basePath("/my-project/")
.checkRemoteLinks(true)
.includeFragments(true)
.build()
.check();
broken.forEach((uri, status) ->
System.out.println("Broken: " + uri + " -> " + status));
Next steps
- Configuration - all builder options
- Collecting Links - input sources and base URL resolution
- Excluding Links - filtering patterns