#
#    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.
#
# Servicemix Jbi Ant definitions
# 
jbi-install-component=org.apache.servicemix.jbi.deployer.task.InstallComponentTask
jbi-uninstall-component=org.apache.servicemix.jbi.deployer.task.UninstallComponentTask
jbi-install-shared-library=org.apache.servicemix.jbi.deployer.task.InstallSharedLibraryTask
jbi-uninstall-shared-library=org.apache.servicemix.jbi.deployer.task.UninstallSharedLibraryTask
jbi-start-component=org.apache.servicemix.jbi.deployer.task.StartComponentTask
jbi-stop-component=org.apache.servicemix.jbi.deployer.task.StopComponentTask
jbi-shut-down-component=org.apache.servicemix.jbi.deployer.task.ShutDownComponentTask
jbi-deploy-service-assembly=org.apache.servicemix.jbi.deployer.task.DeployServiceAssemblyTask
jbi-undeploy-service-assembly=org.apache.servicemix.jbi.deployer.task.UndeployServiceAssemblyTask
jbi-start-service-assembly=org.apache.servicemix.jbi.deployer.task.StartServiceAssemblyTask
jbi-stop-service-assembly=org.apache.servicemix.jbi.deployer.task.StopServiceAssemblyTask
jbi-shut-down-service-assembly=org.apache.servicemix.jbi.deployer.task.ShutDownServiceAssemblyTask
jbi-list-service-engines=org.apache.servicemix.jbi.deployer.task.ListServiceEnginesTask
jbi-list-binding-components=org.apache.servicemix.jbi.deployer.task.ListBindingComponentsTask
jbi-list-shared-libraries=org.apache.servicemix.jbi.deployer.task.ListSharedLibrariesTask
jbi-list-service-assemblies=org.apache.servicemix.jbi.deployer.task.ListServiceAssembliesTask
