#
# 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.. = src/main/java/,\
src/main/resources
output.. = bin/
bin.includes = plugin.xml,\
      META-INF/,\
      .,\
      src/main/resources/icons/,\
      lib/commons-codec.jar,\
      lib/commons-collections4.jar,\
      lib/commons-lang3.jar,\
      lib/cxf-core.jar,\
      lib/cxf-rt-frontend-jaxrs.jar,\
      lib/cxf-rt-rs-client.jar,\
      lib/cxf-rt-rs-extension-search.jar,\
      lib/cxf-rt-transports-http.jar,\
      lib/jackson-annotations.jar,\
      lib/jackson-core.jar,\
      lib/jackson-databind.jar,\
      lib/jackson-datatype-joda.jar,\
      lib/jackson-jaxrs-base.jar,\
      lib/jackson-jaxrs-json-provider.jar,\
      lib/jackson-module-jaxb-annotations.jar,\
      lib/javax.annotation-api.jar,\
      lib/javax.ws.rs-api.jar,\
      lib/jaxb-core.jar,\
      lib/jaxb-impl.jar,\
      lib/joda-time.jar,\
      lib/log4j-api.jar,\
      lib/slf4j-api.jar,\
      lib/stax2-api.jar,\
      lib/syncope-client-lib.jar,\
      lib/syncope-common-lib.jar,\
      lib/syncope-common-rest-api.jar,\
      lib/validation-api.jar,\
      lib/woodstox-core-asl.jar,\
      lib/xmlschema-core.jar,\
      lib/jsoup.jar
