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

SCons User Guide 0.98.0
Prev | Chapter 24. Java Builds | Next

# 24.3. 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/Example1.java src/Example2.java src/Example3.java
          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/Example1.java prog1/Example2.java
          javac -d classes -sourcepath prog2 prog2/Example3.java prog2/Example4.java
          jar cf prog1.jar -C classes Example1.class -C classes Example2.class
          jar cf prog2.jar -C classes Example3.class -C classes Example4.class

Prev | Home | Next
How SCons Handles Java Dependencies | Up | Building C Header and Stub Files: the `JavaH` Builder