Apache Struts IntelliJ IDEA plugin

Clone this repo:
  1. 11d5ad4 ci(deps): bump JetBrains/qodana-action from 2025.3.2 to 2026.1.0 (#84) by dependabot[bot] · 3 days ago main v261.19027-nightly.2
  2. 2a514e1 Bump pluginVersion to 261.19027.1 (#83) by Lukasz Lenart · 4 days ago v261.19027-nightly.1
  3. 74aa6b5 ci(release): auto-bump pluginVersion after publish (#82) by Lukasz Lenart · 4 days ago
  4. 4c93e3f Changelog update - 261.19017.1 (#81) by Lukasz Lenart · 4 days ago
  5. 8ac1cc9 ci(release): skip duplicate asset upload in publish workflow (#80) by Lukasz Lenart · 4 days ago

Apache Struts IntelliJ IDEA plugin

Build

Provides full integration of Apache Struts 2.

Documentation

Questions related to the usage of the plugin should be posted to the user mailing list. Any issues should be reported using JIRA and IDEA plugin component.

Optional features

Graph editor tab (disabled by default)

The plugin includes a visual graph view for struts.xml configuration files. This feature uses a deprecated IntelliJ Platform API and is disabled by default because it can cause IDE freezes on newer platform versions.

To enable it, add the following JVM property via Help | Edit Custom VM Options:

-Dcom.intellij.struts2.enableGraphEditor=true

Restart the IDE after adding the property. The Graph tab will then appear when opening struts.xml files that are part of a Struts file set.

Testing

Tests are located in src/test/java and use IntelliJ Platform test frameworks (LightJavaCodeInsightFixtureTestCase and similar). Test data fixtures are in src/test/testData.

./gradlew test -x rat                        # Run tests (excluding Apache RAT license checks)
./gradlew test --tests "OgnlParsingTest"     # Run a specific test class
./gradlew test --tests "*Resolving*"         # Run tests matching a pattern

Code coverage

Kover is integrated for code coverage. Generate an HTML report with:

./gradlew koverHtmlReport                    # Report in build/reports/kover/

Changelog maintenance

The project follows the Keep a Changelog approach. The Gradle Changelog Plugin propagates entries from CHANGELOG.md to the JetBrains Marketplace plugin page.

Record changes under the [Unreleased] section in CHANGELOG.md. The CI pipeline handles version bumping on release.

Release process

The plugin uses a two-phase release process with nightly builds for continuous delivery:

Nightly builds are created automatically when commits are merged to main. The Build workflow runs tests, builds the plugin, and publishes it to the JetBrains Marketplace nightly channel. A GitHub pre-release is also created with the plugin zip attached.

Preparing a release is a manual step. Go to Actions → Prepare Release → Run workflow, optionally providing a version override. This workflow:

  1. Builds the plugin (using the version from gradle.properties or your override)
  2. Creates a git tag v{VERSION} and pushes it
  3. Creates a GitHub pre-release with the plugin zip attached

PMC members can then download the zip from the pre-release, test it locally, and vote.

Publishing a release happens when the pre-release is promoted to a full release. Edit the GitHub pre-release, uncheck “Set as a pre-release”, and save. This triggers the Release workflow which:

  1. Publishes the plugin to the JetBrains Marketplace Stable channel
  2. Uploads the plugin zip as a release asset
  3. Creates a pull request to update the changelog