All notable changes to the Lucee Script Runner project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Local JAR Support: Added
luceeJarparameter to test locally built Lucee JARs without publishing- Accepts full path to a local JAR file
- Overrides both
luceeVersionandluceeVersionQuery - Perfect for Lucee core developers testing builds
- Unique Working Directories: Added
uniqueWorkingDirparameter with three modes:false(default): Uses standard temp/lucee directorytrue: Auto-generates unique directory with timestamp and random ID- Custom path: Uses specified directory path
- Concurrent Execution Support: Multiple script-runner instances can now run simultaneously without conflicts
- Race Condition Detection: Automatic detection and prevention of directory conflicts
- Improved JFR Logging:
- JFR files now output to organized
logs/directory - Descriptive filenames:
timestamp-lucee-version-webroot-script-javaversion.jfr - Added
logs/to.gitignore
- JFR files now output to organized
- Enhanced Error Messages:
- Git Bash path conversion detection with specific solutions
- Execute script validation with exact file path shown
- Windows trailing backslash validation
- Cross-Platform Path Handling: Robust path concatenation logic for Windows and Unix systems
- Version Detection & Servlet API Handling:
- Automatic detection of Lucee 5/6 vs 7+ to select correct servlet dependencies
- New
detect-version-typetarget inspects version strings and JAR filenames - Split Maven pom files:
pom-javax.xml(Lucee 5/6) andpom-jakarta.xml(Lucee 7+) - Seamless handling of javax to jakarta servlet API transition
- Build target reordering so version detection happens before dependency resolution
- Java Agent Support:
-DjavaAgent=- Path to Java agent JAR (profilers, debuggers like luceedebug)-DjavaAgentArgs=- Arguments passed to the agent-Djdwp=- Enable JDWP debugging agent with suspend=n (default: false)-DjdwpPort=- JDWP port configuration (default: 9999)- Automatic
--add-opens=java.base/java.lang=ALL-UNNAMEDwhen using agents
- Advanced JVM Options:
-DjvmArgs=- Raw JVM arguments string for custom configurations-DFlightRecordingSettings=- JFR settings profile (default/profile/custom.jfc)-DPrintInlining=- JVM compilation diagnostics (PrintInlining, PrintCompilation, UnlockDiagnosticVMOptions)-DPrintGCDetails=- Detailed garbage collection logging-DUseEpsilonGC=- Epsilon no-op garbage collector with AlwaysPreTouch for testing
- Version Query Format Enhancement:
luceeVersionnow accepts version query format (e.g.,7.0/stable/light)- Maintains backward compatibility with
luceeVersionQueryparameter - Unified version handling logic across both parameters
- Updated Lucee Version: Standardized all references to version 7.0.1.100 across codebase
- JFR Filename Format: Changed from
lucee-version.jar-javaversion.jfrto descriptive format with timestamp and context - Documentation: Updated README.md with comprehensive working directory behavior explanations
- Build Process:
- Uncommented
include templateexecution path in build-run-cfml.xml - Build target dependencies reordered:
detect-version-typenow runs beforesetEnv - Enhanced conditional property checking for javaAgent, jvmProperties, jvmArgs
- Echo statements now show which servlet type is selected (javax vs jakarta)
- Uncommented
- Error Handling:
_internalRequestnow captures and validates HTTP status codes- Non-200 status codes throw descriptive errors with LDEV-6086 reference
- Better debugging information for script execution failures
- File Path Validation Bug: Fixed concatenation logic for execute script validation
- Git Bash Path Conversion Issues: Added detection and helpful error messages for MSYS path conversion problems
- Build Script Path Resolution: Fixed relative path issues when using unique working directories
- Request Timeout Detection: Internal requests now properly detect and report non-200 status codes (LDEV-6086)
uniqueWorkingDir: Controls working directory behaviorwebroot.name: Extracted basename of webroot for JFR filenamesexecute.clean: Cleaned execute path (removes leading slashes) for JFR filenamesexecute.fullpath: Properly concatenated full path for file validationjavaAgent: Path to Java agent JAR filejavaAgentArgs: Arguments passed to Java agentjdwp: Enable JDWP debugging agent (suspend=n)jdwpPort: JDWP port configuration (default: 9999)jvmArgs: Raw JVM arguments stringFlightRecordingSettings: JFR settings profile configurationPrintInlining: JVM compilation diagnostics flagPrintGCDetails: Garbage collection logging flagUseEpsilonGC: Epsilon no-op GC flagpom.file: Dynamically selected pom file (pom-javax.xml or pom-jakarta.xml)version.major.extracted: Extracted major version number for servlet API detectionusesJavax: Boolean flag indicating if javax servlet API is used (vs jakarta)servlet.type: Servlet API type in use (javax or jakarta)
- Added
set-unique-working-dirtarget with timestamp generation and race condition checks - Enhanced
run-cfmltarget with improved validation and path handling - Updated GitHub Actions workflow with concurrent execution tests
- New
detect-version-typetarget for automatic servlet API detection:- Parses version strings from
luceeVersion,luceeVersionQuery, orluceeJarfilename - Extracts major version number using regex
- Selects appropriate pom file before dependency resolution
- Supports various version formats:
7.0.0.1,lucee-7.0.jar,7/snapshot/zero, file paths
- Parses version strings from
- Internal request result validation with status code checking
- Early validation of execute script existence under webroot
- Specific error messages for common Git Bash issues
- Clear guidance on workarounds and solutions
- HTTP status code validation for internal requests (detects timeouts and failures)
- Existing usage remains unchanged (fully backward compatible)
- New JFR files will appear in
logs/directory instead of project root - Git users should add
logs/to their.gitignoreif not already present - Lucee 5/6 and 7+ now use different servlet dependencies automatically (javax vs jakarta)
- Version query format can now be used with
luceeVersionparameter directly - All new parameters are optional and have sensible defaults