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

source.Axis2CodegenWizard.jar = src/main/java/
output.Axis2CodegenWizard.jar = bin/
bin.includes = plugin.xml,\
               Axis2CodegenWizard.jar,\
               icons/,\
               help_toc.xml,\
               help/,\
               lib/,\
               src/,\
               lib/geronimo-activation_1.1_spec-@geronimo.spec.activation.version@.jar,\
               lib/annogen-@annogen.version@.jar,\
               lib/ant-@ant.version@.jar,\
               lib/axiom-api-@axiom.version@.jar,\
               lib/axiom-dom-@axiom.version@.jar,\
               lib/axiom-impl-@axiom.version@.jar,\
               lib/axis2-@version@.jar,\
               lib/commons-logging-@commons.logging.version@.jar,\
               lib/log4j-@log4j.version@.jar,\
               lib/neethi-@neethi.version@.jar,\
               lib/stax-api-@stax.api.version@.jar,\
               lib/wsdl4j-@wsdl4j.version@.jar,\
               lib/wstx-asl-@stax.impl.version@.jar,\
               lib/xmlbeans-@xmlbeans.version@.jar,\
               lib/XmlSchema-@xmlschema.version@.jar,\
               lib/woden-@woden.version@.jar,\
	       lib/commons-httpclient-@commons.httpclient.version@.jar,\
	       lib/commons-codec-@commons.codec.version@.jar,\
	       lib/jibx-bind-@jibx.version@.jar,\
	       lib/jibx-run-@jibx.version@.jar,\
src.includes = icons/,\
               plugin.xml,\
               src/,\
               help_toc.xml,\
               help/,\
               .project,\
               .classpath,\
               build.properties
