Title: Aries Application Modules
Notice:    Licensed to the Apache Software Foundation (ASF) under one
           or more contributor license agreements.  See the NOTICE file
           distributed with this work for additional information
           regarding copyright ownership.  The ASF licenses this file
           to you under the Apache License, Version 2.0 (the
           "License"); you may not use this file except in compliance
           with the License.  You may obtain a copy of the License at
           .
             http://www.apache.org/licenses/LICENSE-2.0
           .
           Unless required by applicable law or agreed to in writing,
           software distributed under the License is distributed on an
           "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
           KIND, either express or implied.  See the License for the
           specific language governing permissions and limitations
           under the License.

<a name="Applications-AriesApplicationModules"></a>
# Aries Application Modules
Below are the list of bundles in the format of mavenBundle(groupId, artifactId) required if using Apache Aries application module.


<a name="Applications-CoreBundles"></a>
## Core Runtime bundles
mavenBundle("org.apache.aries.blueprint", "org.apache.aries.blueprint" ),<br/>
mavenBundle("org.apache.aries", "org.apache.aries.util" ),<br/>
mavenBundle("org.apache.felix", "org.apache.felix.bundlerepository"),<br/>
mavenBundle("org.apache.aries.application","org.apache.aries.application.resolver.obr"),<br/>
mavenBundle("org.apache.aries.application","org.apache.aries.application.install" ),<br/>
mavenBundle("org.apache.aries.application","org.apache.aries.application.api" ),<br/>
mavenBundle("org.apache.aries.application","org.apache.aries.application.management" ),<br/>
mavenBundle("org.apache.aries.application","org.apache.aries.application.utils" ),<br/>
mavenBundle("org.apache.aries.application","org.apache.aries.application.modeller"),<br/>
mavenBundle("org.apache.aries.application","org.apache.aries.application.default.local.platform"),<br/>
mavenBundle("org.apache.aries.application","org.apache.aries.application.noop.platform.repo"), &lt;-- This module no longer exists in 0.3.1-SNAPSHOT<br/>
mavenBundle("org.apache.aries.application","org.apache.aries.application.noop.postresolve.process"), &lt;-- This module no longer exists in 0.3.1-SNAPSHOT<br/>
mavenBundle("org.apache.aries.application","org.apache.aries.application.deployment.management"),<br/>

Besides the above bundles, either the non-isolated runtime or isolated runtime is also required.
<a name="Applications-NonIsoloatedAriesapplication"></a>
## Non-isolated Runtime


mavenBundle("org.apache.aries.application","org.apache.aries.application.runtime" ),<br/>
<a name="Applications-IsoloatedAriesapplication"></a>
## Isolated Runtime
mavenBundle("org.apache.aries.application","org.apache.aries.application.runtime.isolated"),<br/>
mavenBundle("org.apache.aries.application","org.apache.aries.application.runtime.framework"),<br/>
mavenBundle("org.apache.aries.application","org.apache.aries.application.runtime.framework.management"),<br/>
mavenBundle("org.apache.aries.application","org.apache.aries.application.runtime.repository"),<br/>

<a name="Applications-ReplacableBundles"></a>
## Replacable bundles
If the application modules are used in a application server, the following bundles should/can be replaced and the services should/can be implemented by the application server.
####org.apache.aries.application.default.local.platform
This bundle should be replaced with an alternative bundle by the application server. This bundle provides the temp directory location.

Note - The following two bundles no longer exist in 0.3.1-SNAPSHOT

The following two bundles can be replaced by the application server if necessary. 
####org.apache.aries.application.noop.platform.repo
The above bundle provides the URL location for the application server runtime capabilities, which are xml file understood by the Felix OBR resolver.
####org.apache.aries.application.noop.postresolve.process
The above bundle provides the post resolve process. It can be replaced if the application server need to modify the deployment manifest generated by the application moduels.


