Use this skill when dynamically loading Java JAR libraries at runtime in a ColdBox application using cbjavaloader. Covers installation, classpath configuration, creating Java objects from JARs, reloading in development, and common use cases (PDF processing, Apache POI, image manipulation).
Load this skill when:
box install cbjavaloader
// config/ColdBox.cfc
moduleSettings = {
cbjavaloader = {
// Paths (relative to webroot) containing JAR files
loadPaths = [ "lib", "jars", "libs/external" ],
// Include server classpath (usually false — use explicit paths)
loadColdFusionClassPath = false,
// Reload classloader on each request — dev only, NEVER in production
reloadOnEveryRequest = getSetting( "environment" ) == "development"
}
}
property name="javaloader" inject="loader@cbjavaloader";
// Create instance (calls default constructor)
var obj = javaloader.create( "com.example.MyClass" )
// Create and initialize with arguments
var reader = javaloader.create( "com.lowagie.text.pdf.PdfReader" )
.init( expandPath( "/documents/file.pdf" ) )
// Get a static value / utility class
var constants = javaloader.create( "org.apache.poi.ss.usermodel.CellType" )
var pdfReader = javaloader.create( "com.lowagie.text.pdf.PdfReader" )
.init( expandPath( "/documents/report.pdf" ) )
var pages = pdfReader.getNumberOfPages()
var workbook = javaloader.create( "org.apache.poi.xssf.usermodel.XSSFWorkbook" )
.init( fileReadBinary( expandPath( "/data/data.xlsx" ) ) )
var sheet = workbook.getSheetAt( 0 )
var bufferedImage = javaloader.create( "java.awt.image.BufferedImage" )
var imageIO = javaloader.create( "javax.imageio.ImageIO" )
var img = imageIO.read( createObject( "java", "java.io.File" ).init( imagePath ) )
var client = javaloader.create( "org.apache.http.impl.client.CloseableHttpClient" )
var request = javaloader.create( "org.apache.http.client.methods.HttpGet" ).init( url )
var response = client.execute( request )
reloadOnEveryRequest = true in production — it destroys a new classloader each requestthis.javaSettings for Java libraries where possible — it's native and faster/lib/ or /jars/) tracked in source control or installed via a build stepcbfs or native server APIs for file-system operations rather than Java java.io.File directly