<!--
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.
-->

<model xmlns="https://codehaus-plexus.github.io/MODELLO/1.8.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="https://codehaus-plexus.github.io/MODELLO/1.8.0 https://codehaus-plexus.github.io/modello/xsd/modello-1.8.0.xsd"
       xml.namespace="http://maven.apache.org/remote-resources/${version}"
       xml.schemaLocation="https://maven.apache.org/xsd/remote-resources-${version}.xsd">
  <id>remote-resources</id>
  <name>RemoteResourcesBundle</name>
  <description><![CDATA[
    A bundle of remote resources.
    This is the model specification for <code>META-INF/maven/remote-resources.xml</code>.
  ]]></description>
  <defaults>
    <default>
      <key>package</key>
      <value>org.apache.maven.plugin.resources.remote</value>
    </default>
  </defaults>
  <classes>
    <class rootElement="true" xml.tagName="remoteResourcesBundle">
      <name>RemoteResourcesBundle</name>
      <version>1.1.0</version>
      <description>Root element of the remote-resources.xml file.</description>
      <fields>
        <field>
          <name>remoteResources</name>
          <version>1.1.0</version>
          <description><![CDATA[
            Remote resources that are contained in a remote resources bundle.
          ]]></description>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>sourceEncoding</name>
          <version>1.1.0</version>
          <description><![CDATA[
            Source encoding of the remote resources contained in the bundle.
          ]]></description>
          <type>String</type>
        </field>
      </fields>
    </class>
  </classes>
</model>
