Class CachingJavaSourceClassLoader


public class CachingJavaSourceClassLoader extends JavaSourceClassLoader
A JavaSourceClassLoader that uses a resource storage provided by the application to cache compiled classes and thus saving unnecessary recompilations.

The application provides access to the resource storage through a pair of a ResourceFinder and a ResourceCreator (see CachingJavaSourceClassLoader(ClassLoader, ResourceFinder, String, ResourceFinder, ResourceCreator).

See AbstractJavaSourceClassLoader.main(String[]) for an example how to use this class.

Notice: You must NOT rely on that this class stores some particular data in some particular resources through the given classFileCacheResourceFinder/Creator! These serve only as a means for the CachingJavaSourceClassLoader to persistently cache some data between invocations. In other words: If you want to compile .java files into .class files, then don't use this class but Compiler instead!

  • Field Details

    • classFileCacheResourceFinder

      private final ResourceFinder classFileCacheResourceFinder
    • classFileCacheResourceCreator

      private final ResourceCreator classFileCacheResourceCreator
    • sourceFinder

      private final ResourceFinder sourceFinder
  • Constructor Details

    • CachingJavaSourceClassLoader

      public CachingJavaSourceClassLoader(ClassLoader parentClassLoader, @Nullable File[] sourcePath, @Nullable String characterEncoding, File cacheDirectory)
      Parameters:
      sourcePath - Directories to scan for source files
      cacheDirectory - Directory to use for caching generated class files (see class description)
    • CachingJavaSourceClassLoader

      public CachingJavaSourceClassLoader(ClassLoader parentClassLoader, ResourceFinder sourceFinder, @Nullable String characterEncoding, ResourceFinder classFileCacheResourceFinder, ResourceCreator classFileCacheResourceCreator)
      Notice that this class is thread-safe if and only if the classFileCacheResourceCreator stores its data atomically, i.e. the classFileCacheResourceFinder sees the resource written by the classFileCacheResourceCreator only after the OutputStream is closed.

      In order to make the caching scheme work, both the classFileCacheResourceFinder and the sourceFinder must support the Resource.lastModified() method, so that the modification time of the source and the class files can be compared.

      Parameters:
      parentClassLoader - Attempt to load classes through this one before looking for source files
      sourceFinder - Finds Java source for class pkg.Cls in resource pkg/Cls.java
      characterEncoding - Encoding of Java source or null for platform default encoding
      classFileCacheResourceFinder - Finds precompiled class pkg.Cls in resource pkg/Cls.class (see class description)
      classFileCacheResourceCreator - Stores compiled class pkg.Cls in resource pkg/Cls.class (see class description)
  • Method Details