<?xml version="1.0" encoding="UTF-8"?>

<!--
 * 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.
 
 @author Bruno Aranda (latest modification by $Author: grantsmith $)
 @version $Revision: 472560 $ $Date: 2006-11-08 18:45:25 +0100 (Mi, 08 Nov 2006) $
 
-->

<archetype>
    <id>myfaces-archetype-jsfcomponents</id>
    <resources>
        <resource>examples/src/main/resources/org/myorganization/component/example/build.properties</resource>
        <resource>examples/src/main/log4j/log4j.properties</resource>
        <resource>examples/src/main/java/org/myorganization/component/example/SayHelloBean.java</resource>
        <resource>examples/src/main/webapp/sayhello.jsp</resource>
        <resource>examples/src/main/webapp/converterDemo.jsp</resource>
        <resource>examples/src/main/webapp/converterDemoResult.jsp</resource>
        <resource>examples/src/main/webapp/validatorDemo.jsp</resource>
        <resource>examples/src/main/webapp/validatorDemoResult.jsp</resource>
        <resource>examples/src/main/webapp/index.jsp</resource>
        <resource>examples/src/main/webapp/WEB-INF/examples-config.xml</resource>
        <resource>examples/src/main/webapp/WEB-INF/web.xml</resource>
        <resource>examples/src/main/webapp/home.jsp</resource>
        <resource>examples/pom.xml</resource>
        <resource>core/src/main/resources/META-INF/componentClass12.vm</resource>
        <resource>core/src/main/resources/META-INF/tagClass12.vm</resource>
        <resource>core/src/main/resources/META-INF/tagValidatorClass12.vm</resource>
        <resource>core/src/main/resources/META-INF/tagConverterClass12.vm</resource>
        <resource>core/src/main/resources/META-INF/validatorClass12.vm</resource>
        <resource>core/src/main/resources/META-INF/mycomponents.tld.vm</resource>
        <resource>core/src/main/java/org/myorganization/component/sayhello/AbstractSayHello.java</resource>
        <resource>core/src/main/java/org/myorganization/component/sayhello/SayHelloRenderer.java</resource>
        <resource>core/src/main/java/org/myorganization/converter/PhoneNumber.java</resource>
        <resource>core/src/main/java/org/myorganization/converter/PhoneNumberConverter.java</resource>
        <resource>core/src/main/java/org/myorganization/validator/AbstractOddNumberValidator.java</resource>
        <resource>core/src/test/java/org/myorganization/component/sayhello/SayHelloRendererTest.java</resource>
        <resource>core/src/test/java/org/myorganization/converter/PhoneNumberConverterTest.java</resource>
        <resource>core/src/test/java/org/myorganization/validator/OddNumberValidatorTest.java</resource>
        <resource>core/pom.xml</resource>
    </resources>
</archetype>















