jimage-rs 0.0.2

A fast and efficient Rust library for working with jimage files used by the Java Platform Module System.
Documentation

jimage-rs

A fast and efficient Rust library for working with jimage files used by the Java Platform Module System.

Crate Docs License

Introduction

jimage-rs is a Rust library and command-line utility for reading and extracting resources from Java image files (jimage).

jimage is a file format used by the Java Virtual Machine (JVM) to store class files and other resources in a compressed format. It is typically found in the lib/modules directory of a Java installation. The format was developed as part of Project Jigsaw (JEP-220) and is used in Java Platform Module System (JPMS).

This crate:

  • is implemented from scratch
  • based on publicly available information (since there is no official jimage file format specification)
  • supports the latest internal version 1.0 of the jimage file format

Library

Sample code of extracting resources from a jimage file:

use std::env;
use std::path::PathBuf;
use jimage_rs::JImage;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let path = PathBuf::from(env::var("JAVA_HOME")?)
        .join("lib")
        .join("modules");
    let jimage = JImage::open(path)?;
    match jimage.find_resource("/java.base/java/lang/String.class")? {
        Some(resource) => println!("Resource found: {:?}", resource),
        None => println!("Resource not found"),
    }

    Ok(())
}

CLI

jimage-rs command-line utility can be used to extract resources from a jimage file:

jimage-rs extract -r /java.base/java/lang/String.class $JAVA_HOME/lib/modules

License

This project is licensed under the MIT license.