Building Java Archive (.jar) Files: the Jar Builder

After building the class files, it's common to collect them into a Java archive (.jar) file, which you do by calling the Jar Builder method. If you want to just collect all of the class files within a subdirectory, you can just specify that subdirectory as the Jar source:

      Java(target = 'classes', source = 'src')
      Jar(target = 'test.jar', source = 'classes')

SCons will then pass that directory to the jar command, which will collect all of the underlying .class files:

      % scons -Q
      javac -d classes -sourcepath src src/ src/ src/
      jar cf test.jar classes

If you want to keep all of the .class files for multiple programs in one location, and only archive some of them in each .jar file, you can pass the Jar builder a list of files as its source. It's extremely simple to create multiple .jar files this way, using the lists of target class files created by calls to the Java builder as sources to the various Jar calls:

      prog1_class_files = Java(target = 'classes', source = 'prog1')
      prog2_class_files = Java(target = 'classes', source = 'prog2')
      Jar(target = 'prog1.jar', source = prog1_class_files)
      Jar(target = 'prog2.jar', source = prog2_class_files)

This will then create prog1.jar and prog2.jar next to the subdirectories that contain their .java files:

      % scons -Q
      javac -d classes -sourcepath prog1 prog1/ prog1/
      javac -d classes -sourcepath prog2 prog2/ prog2/
      jar cf prog1.jar classes/Example1.class classes/Example2.class
      jar cf prog2.jar classes/Example3.class classes/Example4.class