- Prerequisites
- Build Options
- Package Installation
- Dependencies
- Running PerlOnJava
- Database Integration
- Build Notes
- Java Library Upgrades
- Using Configure.pl
- Troubleshooting
- Java 22 or higher (Java 22, 23, 24, 25+ are all supported)
- Maven or Gradle (Gradle wrapper included - recommended)
- Optional: JDBC drivers for database connectivity
The project includes a Makefile that wraps Gradle commands for a familiar build experience:
make # same as 'make build'
make build # builds the project and runs unit tests
make dev # force clean rebuild (use during active development)
make test # runs fast unit tests
make clean # cleans build artifacts
make deb # creates a Debian package (Linux only)mvn clean package./gradlew clean buildFor Debian-based systems (Ubuntu, Debian, Mint, etc.), you can create and install a .deb package:
Build the package:
make debThis creates a Debian package in build/distributions/ with:
- PerlOnJava JAR installed to
/usr/share/perlonjava/ jperlcommand installed to/usr/bin/- All dependencies bundled
- Systemwide availability
Install the package:
sudo dpkg -i build/distributions/perlonjava_*.debUsage after installation:
# jperl is now available systemwide
jperl -E 'say "Hello World"'
jperl myscript.pl
# No need for ./jperl - it's in your PATHUninstall:
sudo dpkg -r perlonjavaBenefits of Debian package:
- Clean installation and removal
- Systemwide availability (no need for
./jperl) - Automatic dependency tracking
- Integrates with system package manager
- Can be distributed to other Debian-based systems
- JUnit: For testing
- ASM: For bytecode manipulation
- ICU4J: For Unicode support
- FASTJSON v2: For JSON support
- SnakeYAML Engine: for YAML support
Unix/Linux/Mac:
./jperl -E 'print "Hello World"'
./jperl myscript.pl
CLASSPATH="jdbc-drivers/h2-2.2.224.jar" ./jperl myscript.plWindows:
jperl -E "print 'Hello World'"
jperl myscript.pl
set CLASSPATH=jdbc-drivers\h2-2.2.224.jar
jperl myscript.pl-I lib: Add library path--debug: Enable debug output--help: Show all options
- Using Configure.pl:
./Configure.pl --search mysql-connector-java- Using Java classpath (shown in platform-specific examples above)
use DBI;
my $dbh = DBI->connect("jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1");
$dbh->do("CREATE TABLE test (id INT, name VARCHAR(50))");See Database Access Guide for detailed connection examples and supported databases.
- Maven builds use
maven-shade-pluginfor creating the shaded JAR - Gradle builds use
com.github.johnrengelman.shadowplugin - Both configurations target Java 22
Maven:
mvn versions:use-latest-versions.
Gradle:
./gradlew useLatestVersions.
The Configure.pl script manages configuration settings and dependencies for PerlOnJava.
View current configuration:
./Configure.plAdd JDBC driver (search):
./Configure.pl --search mysql
make # Rebuild to include driverAdd JDBC driver (direct):
./Configure.pl --direct com.h2database:h2:2.2.224
make # Rebuild to include driverUpdate configuration:
./Configure.pl -D perlVersion=v5.42.0Upgrade all dependencies:
./Configure.pl --upgrade-h, --help- Show help message-D key=value- Set configuration value--search keyword- Search Maven Central for artifacts--direct group:artifact:version- Add dependency with Maven coordinates--verbose- Enable verbose output--upgrade- Upgrade dependencies to latest versions
- Rebuild required: After adding dependencies with
--searchor--direct, you must runmaketo download and bundle them - Alternative approach: Instead of bundling drivers, you can use CLASSPATH:
CLASSPATH=/path/to/driver.jar ./jperl script.pl
→ See Configure.pl Reference for complete documentation
Problem: When building with Java 25 or later, you see:
BUG! exception in phase 'semantic analysis' in source unit '_BuildScript_' Unsupported class file major version 69
> Unsupported class file major version 69
Cause: An old cached Gradle version (8.x) doesn't support Java 25. Java 25 uses class file version 69, which requires Gradle 9.0+.
Solution: Clear the old Gradle cache and rebuild:
# Linux/macOS
rm -rf ~/.gradle/wrapper/dists/gradle-8.*
make clean
make
# Windows (PowerShell)
Remove-Item -Recurse -Force "$env:USERPROFILE\.gradle\wrapper\dists\gradle-8.*"
gradlew.bat clean
makeThe project includes a Gradle wrapper configured for Gradle 9.0+, which supports Java 22 through Java 26.
Based on Gradle's official compatibility matrix:
| Java Version | Class File Version | Gradle Required |
|---|---|---|
| Java 22 | 66 | 8.8+ |
| Java 23 | 67 | 8.10+ |
| Java 24 | 68 | 8.14+ |
| Java 25 | 69 | 9.1.0+ |
| Java 26 | 70 | 9.4.0+ |
The Makefile automatically detects Java 25+ and upgrades the Gradle wrapper to 9.1.0 if needed. It also clears any incompatible cached Gradle distributions (8.x and 9.0.x).
Make sure you have a JDK installed and JAVA_HOME is set:
# Linux/macOS (add to ~/.bashrc or ~/.zshrc)
export JAVA_HOME=/path/to/jdk
# Windows (System Properties > Environment Variables)
set JAVA_HOME=C:\path\to\jdkUse make dev instead of make for faster builds during development - it skips tests:
make dev # Compiles only, no tests