<?xml version="1.0"?>
<!--
   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.
-->

<metainfo>
  <schemaVersion>2.0</schemaVersion>
  <applicationPackage>
    <name>add-on-package-apply-on-one-component</name>
    <comment>
      add-on-package-apply-on-one-component
    </comment>
    <version>2.0</version>
    <type>ADDON-PACKAGE</type>
    <minHadoopVersion>1.0</minHadoopVersion>
    
    <components>
      <component>
        <name>echo</name>
        <commandScript>
          <script>scripts/echo.py</script>
          <scriptType>PYTHON</scriptType>
          <timeout>600</timeout>
        </commandScript>
      </component>
      
    </components>
  </applicationPackage>
</metainfo>
