Coder Social home page Coder Social logo

jigsaw-jrtfs's Introduction

jigsaw-jrtfs

A backport of jrtfs.jar for 1.7

This backport automatically take the source from JDK 9 that are related to the JRT filesystem and retrofit them to be used by a Java 7 VM.

Warning: all the files of the directory 'src' are under the OpenJDK classical license (GPL + ClassPath Exception) while all the other files are under the MIT license.

To read the jigsaw image format you need to put the jrtfs-backport.jar in your classpath and at runtime change 3 global properties

public class Test {
  private static void patch(Path bootImagePath, Path extImagePath, Path appImagePath) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
    Class<?> systemImagesClass = Class.forName("jdk.internal.jrtfs.SystemImages");
    Field bootImagePathField = systemImagesClass.getDeclaredField("bootImagePath");
    Field extImagePathField = systemImagesClass.getDeclaredField("extImagePath");
    Field appImagePathField = systemImagesClass.getDeclaredField("appImagePath");
    
    Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
    theUnsafe.setAccessible(true);
    Unsafe unsafe = (Unsafe)theUnsafe.get(null);
    
    unsafe.putObjectVolatile(unsafe.staticFieldBase(bootImagePathField), unsafe.staticFieldOffset(bootImagePathField), bootImagePath);
    unsafe.putObjectVolatile(unsafe.staticFieldBase(extImagePathField), unsafe.staticFieldOffset(extImagePathField), extImagePath);
    unsafe.putObjectVolatile(unsafe.staticFieldBase(appImagePathField), unsafe.staticFieldOffset(appImagePathField), appImagePath);
  }
  
  public static void main(String[] args) throws URISyntaxException, ClassNotFoundException, NoSuchFieldException, IllegalAccessException, IOException {
    String RUNTIME_HOME = "/usr/jdk/jdk1.9.0-jigsaw";  // your JAVA HOME containing the JDK 9
    
    // we need to patch the home at runtime
    FileSystem defaultFs = FileSystems.getDefault();
    Path bootImagePath = defaultFs.getPath(RUNTIME_HOME, "lib", "modules", "bootmodules.jimage");
    Path extImagePath = defaultFs.getPath(RUNTIME_HOME, "lib", "modules", "extmodules.jimage");
    Path appImagePath = defaultFs.getPath(RUNTIME_HOME, "lib", "modules", "appmodules.jimage");
    patch(bootImagePath, extImagePath, appImagePath);
    
    FileSystem jrtFs = FileSystems.getFileSystem(new URI("jrt:/"));
    // enjoy !
  }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.