- Java 21
- Maven 3.9.x
mvn clean installThe output is rendered to target/opennlp-site/. Open target/opennlp-site/index.html in a browser to preview.
mvn compile -Pserve # http://localhost:8080/
mvn compile -Pserve -Djbake.port=9000 # custom portBakes 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.
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-addonsandapache/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.
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.
| Key | Meaning |
|---|---|
<apacheId>.gh |
One 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>.status |
active or emeritus. Forces the section bucket regardless of what the live activity check says. |
<apacheId>.chair |
true 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 = activeIf 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.
Website is built via ASF BuildBot. You find it here.