<!--
  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.
-->
<archetype-descriptor name="sling-taglib" partial="true">
    <requiredProperties>
        <requiredProperty key="tagUri"/>
        <requiredProperty key="tagPrefix"/>
        <requiredProperty key="tagName"/>
    </requiredProperties>
	<fileSets>
		<fileSet filtered="true" packaged="true" encoding="UTF-8">
			<directory>src/main/java</directory>
			<includes>
				<include>**/*.java</include>
			</includes>
		</fileSet>
		<fileSet filtered="true" packaged="false" encoding="UTF-8">
			<directory>src/main/resources</directory>
			<includes>
				<include>**/taglib.tld</include>
			</includes>
		</fileSet>
	</fileSets>
</archetype-descriptor>