24.3. Building Java Archive (`.jar`) Files: the `Jar` Builder
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. 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 | Up | Next
24.2. How SCons Handles Java Dependencies | Home | 24.4. Building C Header and Stub Files: the `JavaH` Builder