What you end up with: a JDK that can redefine classes while your application runs, so that most edits take effect without a restart; Eclipse with Parslips for editing templates; and Maven pointed at the WOCommunity repository so the WebObjects frameworks resolve. The steps assume macOS and a shell; Linux is the same apart from the paths.

1. Install the JetBrains Runtime

Any current JDK runs wonder-slim, but only the JetBrains Runtime ships with DCEVM, the enhanced class redefinition that lets a running application pick up changed classes beyond method bodies. That is what makes the edit-and-reload loop work, so it is the one to develop on.

The simplest way to get it is SDKMAN!, which lists the JetBrains builds under the vendor JetBrains. Install SDKMAN! if you don't have it, then pick the newest entry that ends in -jbr:

curl -s "https://get.sdkman.io" | bash
source ~/.sdkman/bin/sdkman-init.sh

sdk list java | grep jbr
sdk install java 25.0.4+1.58348-jbr

That downloads, unpacks and registers the JDK under ~/.sdkman/candidates/java/, with none of the quarantine flags a manual download picks up. Check it took, and that the enhanced redefinition flag is accepted:

~/.sdkman/candidates/java/25.0.4+1.58348-jbr/bin/java -XX:+AllowEnhancedClassRedefinition -version

If you would rather not use SDKMAN!, the releases page has the same builds as tarballs; take the jbrsdk variant for your architecture. Unpacking a tarball on macOS marks it quarantined, so you will need xattr -r -d com.apple.quarantine on the unpacked directory before the JVM will start. This article walks through that route.

2. Add HotswapAgent to the JDK

DCEVM redefines classes; HotswapAgent tells frameworks about it, so that caches and reflection-based lookups see the new definitions. It is a single jar that the JDK loads from a fixed location. Download the latest hotswap-agent-x.y.z.jar from the releases page and place it as lib/hotswap/hotswap-agent.jar inside the JDK:

JDK=~/.sdkman/candidates/java/25.0.4+1.58348-jbr
curl -LO https://github.com/HotswapProjects/HotswapAgent/releases/download/RELEASE-2.0.3/hotswap-agent-2.0.3.jar
mkdir -p "$JDK/lib/hotswap"
mv hotswap-agent-2.0.3.jar "$JDK/lib/hotswap/hotswap-agent.jar"

The file name inside the JDK must be exactly hotswap-agent.jar, whatever version you downloaded.

3. Install Eclipse

Download the current Eclipse IDE for Java Developers from eclipse.org. It includes the Maven integration (m2e) that wonder-slim projects rely on. Eclipse bundles its own JDK for running the IDE itself; that one is not the one your applications will run on, so leave it be.

4. Install Parslips

Parslips is the template editor, a refactoring of WOLips focused on component templates for WebObjects and ng-objects. In Eclipse open Help → Install New Software…, click Add… and enter the update site:

https://undur.github.io/parslips/repository/

Select Parsley Template Editor, follow the prompts, and restart Eclipse when asked. The getting-started guide covers the perspective, shortcuts and project settings once it is in.

5. Point Maven at the WOCommunity repository

The WebObjects frameworks aren't on Maven Central; they come from the WOCommunity repository, which has to be declared in ~/.m2/settings.xml. Parslips does this for you: open Eclipse → Settings → Parsley → Maven and click Add WOCommunity Repository. It backs up any existing settings.xml first, creates one if there is none, and reports whether the repository is configured.

6. Add the JDK to Eclipse and give it the right arguments

Open Eclipse → Settings → Java → Installed JREs, click Add…, choose Standard VM, and set the JRE home to the JDK you installed:

/Users/you/.sdkman/candidates/java/25.0.4+1.58348-jbr

In the same dialog, fill in Default VM arguments. The first two switch on class redefinition and load HotswapAgent; the --add-opens lines let WebObjects reflect into JDK internals it has always reflected into:

-XX:+AllowEnhancedClassRedefinition
-XX:HotswapAgent=fatjar
--add-opens java.base/java.time=ALL-UNNAMED
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED

Tick the new JDK as the default. Depending on which classes your application touches you may need to open further packages; this set has served well.

7. Check that it works

Launch an application in debug mode and watch the console: HotswapAgent announces itself in the first lines. Then change a method body, save, and call the code again; the change is there without a restart. Adding a method or a field works too, that is DCEVM's contribution over the stock JVM. Changes to a class's constructor or hierarchy still need a restart.

Also worth having on the command line: git, which macOS installs on first use via the Xcode command-line tools, and Maven itself for builds outside Eclipse, which SDKMAN! provides with sdk install maven.