UnsupportedClassVersionError in Closure

Today while Getting Started with the Closure Compiler Application I ran into the following trouble:

jj5@mercy:~/Desktop/compiler-latest$ java -jar compiler.jar --help

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/google/javascript/jscomp/CommandLineRunner : Unsupported major.minor version 51.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: com.google.javascript.jscomp.CommandLineRunner. Program will exit.

To fix the problem I installed jdk-7:

root@mercy:/home/jj5# apt-get install openjdk-7-dbg openjdk-7-demo openjdk-7-doc openjdk-7-jdk openjdk-7-jre

PHP spl_autoload_register

Today I used spl_autoload_register again.

This time to load default concrete classes. For example in my framework I have a class called SlibUser:

class SlibUser extends SlibRecord {
  public static function Load( $id ) {
    $args = array( 'id' => $id );    
    $data = db()->get_row( 'select * from /*prefix*/user where id = :id', $args );
    if ( $data ) { return new User( $data ); }
    return null;
  }
}

As you can see SlibUser creates a new User. That User can be provisioned by a user of my framework, but if they don’t specify a particular User definition I give them a default implementation with spl_autoload_register, e.g.:

<?php

function load_slib_mock( $class = false ) {

  //var_dump( $class );
  
  static $classes;
  static $files;
  
  if ( ! $files ) { $files = array(); }
  
  if ( ! $classes ) {
    
    $classes = array(
        
      // URL
      'Uri',
      'UriPath',
      'UriPathBuilder',
      'UriQuery',
      'UriQueryBuilder',
      'UriQueryNode',
        
      // framework:
      'Auth',
      'Column',
      'FrontController',
      'Option',
      'OptionGroup',
      'ResourceManager',
      'Schema',
      'Settings',
      'Table',
      'Variable',
      
      // database:
      'Database',
      'DatabaseUpgrader',
        
      // ORM:
      'Browser',
      'GeoipLocation',
      'HttpAccept',
      'HttpAcceptEncoding',
      'HttpAcceptLanguage',
      'HttpMethod',
      'HttpUserAgent',
      'Partition',
      'Request',
      'Role',
      'Session',
      'SessionSettings',
      'User',
      'UserPartition',
      'UserSettings'
    );
    
  }

  if ( ! in_array( $class, $classes ) ) { return false; }

  $path = "/var/tmp/slib-$class.php";

  if ( ! file_exists( $path ) ) {
  
    $content = "<?php class $class extends Slib$class {}";

    $file = fopen( $path, 'w' );

    if ( ! $file ) { throw new IOException( "Cannot write '$file'." ); }

    fwrite( $file, $content );

    fclose( $file );
    
  }
  
  require_once( $path );
  
  return true;
  
}

// autoload handler:
spl_autoload_register( 'load_slib_mock', true, true );

Videos I watched recently