Website sources for the Apache OpenNLP website

Clone this repo:
  1. aece038 fix: Point privacy link to canonical ASF privacy policy (#99) by Rich Bowen · 2 weeks ago main
  2. 256ea5b Fix team page mobile layout, merge krickert, refresh footer by Richard Zowalla · 5 weeks ago
  3. 34b3654 Trigger Build Bot by Richard Zowalla · 5 weeks ago
  4. ca8cc13 Trigger Build Bot by Richard Zowalla · 5 weeks ago
  5. 23c4f49 Update README.md by Richard Zowalla · 5 weeks ago

Welcome to OpenNLP Site Source Code

GitHub license Build Status Stack Overflow

Requirements

  • Java 21
  • Maven 3.9.x

Build

mvn clean install

The output is rendered to target/opennlp-site/. Open target/opennlp-site/index.html in a browser to preview.

Live Dev Mode

mvn compile -Pserve                       # http://localhost:8080/
mvn compile -Pserve -Djbake.port=9000     # custom port

Bakes the site once, then serves target/opennlp-site/ over HTTP and watches src/main/jbake/ recursively. Any change to a content file, template, asset or jbake.properties triggers a re-bake (debounced ~400 ms); reload the browser to see it. Press Ctrl-C to stop.

The contributor fetch (Whimsy + GitHub) runs once at startup and is reused across re-bakes — no re-fetch and no new rate-limit cost while you iterate. Cached HTTP responses live under target/contrib-cache/. Restart mvn compile -Pserve to refresh the contributor data.

Live Contributor Data

The team page (team.html) is populated at build time by the org.apache.opennlp.website.Site driver, which fetches:

  • the OpenNLP committer/PMC roster from Whimsy LDAP exports, and
  • live contributor + activity data from the GitHub REST API across apache/opennlp, apache/opennlp-site, apache/opennlp-addons and apache/opennlp-sandbox.

It then partitions members into Active Team (any activity in the last 2 years), Emeritus (committer/PMC with no recent activity) and a Wall of Fame (everyone else with a GitHub login — committers/PMCs aren't repeated here). Identity merging (login + apache id + email + normalized name) and bot filtering match the logic of the opennlp-stats reference tool.

HTTP responses are cached on disk under target/contrib-cache/ with a 6-hour TTL, so iterative local builds are cheap. The build runs without a GitHub token; anonymous rate limits (60 req/h) may leave a few /users/{login} lookups unresolved on a cold cache, which can drop a committer whose GitHub login differs from their Apache id into Emeritus until the cache warms. Re-running the build inside the TTL fills it in.

Manual Roster Overrides

Whimsy doesn't always carry githubUsername for committers, and the live /users/{login} bridge can hit anonymous rate limits, so src/main/resources/team-overrides.properties lets you pin attributes per Apache id. The file is read at build time and merged on top of the Whimsy + GitHub data.

KeyMeaning
<apacheId>.ghOne or more ;-separated GitHub logins. The first is used for the card link and avatar; the rest are merged into the same record so their commits/PRs/comments roll up.
<apacheId>.statusactive or emeritus. Forces the section bucket regardless of what the live activity check says.
<apacheId>.chairtrue for the current PMC chair. Renders an extra orange Chair badge on the card and adds the chair entry to the legend.

Example:

jzemerick.gh     = jzonthemtn
jzemerick.status = active
jzemerick.chair  = true

joern.gh         = kottmann
joern.status     = active
Skipping the live fetch (offline / restricted CI)

If the build environment can't reach api.github.com or whimsy.apache.org — corporate proxy, blocked CI runner, demo build — skip the retrieval entirely:

mvn compile -Pno-fetch          # Maven profile
OPENNLP_SITE_NO_FETCH=1 mvn compile   # env var (any non-empty truthy value)

The team page renders with empty Active/Emeritus/Wall-of-Fame sections (each shows a “No contributors to show.” placeholder); the rest of the site builds normally.

Build Bot

Website is built via ASF BuildBot. You find it here.