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

#
# Set here bnd repositories
#
-plugin.1.Release: aQute.bnd.deployer.repository.LocalIndexedRepo; \
    name=Release; \
    local=${workspace}/cnf/releaserepo; \
    pretty=true

-plugin.2.Local: aQute.bnd.deployer.repository.LocalIndexedRepo; \
    name=Local; \
    local=${workspace}/cnf/localrepo; \
    pretty=true
		
-plugin.3.Repository: aQute.bnd.repository.maven.provider.MavenBndRepository; \
    releaseUrl = 'https://repo1.maven.org/maven2'; \
    name = Repository; \
    index = ${.}/repository.mvn; \
    noupdateOnRelease=true

#
# configure release and baseline repos
#
-releaserepo: Release
-baselinerepo: Repository
-baseline: *

#
# Set here the maven group id for the workspace bundles
#
-pom: groupid = org.apache.felix

#
# Don't include sources in generated bundles
#
-sources: true

#
# Java parameters
#
javac.source: 1.8
javac.target: 1.8

#
# Removes some headers in order to reduce binary diff between same bundles that are not changed between subsequent releases.
#
-removeheaders: Bnd-LastModified,Tool,Created-By,Include-Resource
