# Tailoring the CM Java Application

Implementers may write their own Java classes to extend the Oracle Utilities application functionality. All Java files should belong to the `com.splwg.cm` package. The CM Java application should be compiled into a jar file named `cm.jar`. The SDK Customer Modification packaging utilities will help build this file. The `cm.jar` is typically deployed into the following directories:

    	$SPLEBASE/splapp/applications/root/WEB-INF/lib
    	$SPLEBASE/splapp/applications/XAIApp/WEB-INF/lib
    	$SPLEBASE/splapp/businessapp/lib
    	$SPLEBASE/splapp/standalone/lib

Additional third-party jar files can be deployed by following the `cm*.jar` naming standard. Customers may use this option to deploy any additional functionality, interfaces with other applications, and so on. These will not be built by the SDK Customer Modification packaging utilities, but will be deployed into the application once it is supplied in jar format.

The root directory may be deployed in a war file format for the runtime environment (`SPLApp.war`). Use the provided utilities to incorporate your `/cm` directory into `SPLApp.war` file.

Important: All `cm*.jar` files that need to be applied must be defined in `$SPLEBASE/structures/cm_jars_structure.xml`. If the file does not exist in the target environment, the sample `cm_jars_structure.xml.example` file can be copied from the SDK packaging's `/etc` folder.

## Manual cm.jar deployment

The `cm.jar` file is usually deployed as part of the CM packaging process (`extractCMsource`, `applyCM`, `create_CM_release`, and so on.), but in some cases it may be desirable to manually deploy the `cm.jar` file to one or more target environments.

CAUTION:
This should be done with care and should only be considered if the `cm.jar` components are self-contained and have no external dependencies.

To manually deploy `cm.jar`:

1. The SPLEBASE/structures/cm_jars_structure.xml must exist and should have at least the following:

       	<?xml version="1.0" encoding="UTF-8"?>
       	<jar_structure>
       	   <cm.jar>
       		  <source_dir_jar>@SPLEBASE@/etc/lib</source_dir_jar>
       		  <dest_folders>
       			 <dest_folder_1>@SPLEBASE@/splapp/applications/XAIApp/WEB-INF/lib</dest_folder_1>
       			 <dest_folder_2>@SPLEBASE@/splapp/applications/root/WEB-INF/lib</dest_folder_2>
       			 <dest_folder_3>@SPLEBASE@/splapp/businessapp/lib</dest_folder_3>
       			 <dest_folder_4>@SPLEBASE@/splapp/standalone/lib</dest_folder_4>
       		  </dest_folders>
       		  <child_jvm_path>@SPLEBASE@/splapp/standalone/lib</child_jvm_path>
       	   </cm.jar>
       	</jar_structure>

   The `<cm.jar>` element identifies the jar file name, usually `cm.jar`, as defined here.

   Element `<source_dir_jar>` defines the source location of the above mentioned jar. The directory in this example should work for most cases.

   The `dest_folder_`n elements point to the target locations where the jar will be placed. The directories in this example should work for all.

2. Manually copy the `cm.jar` to the directory specified in the `<source_dir_jar>` element, typically `$SPLEBASE/etc/lib`.

3. Run `initialSetup.sh` (or `.bat` on Windows) to do the rest. This will copy the `cm.jar` to the specified target locations and rebuild the war and ear files.

Parent topic: Preserving Customer Changes