blob: d3118057eca0766d4a5a841f266cef3a48623eee [file] [log] [blame]
#
# 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.
#
# This task creates an OSGi bundle package using the bnd tool.
#
# The classpath and path to a bnd configuration file are required.
# Additional properties can be specified using the bnd.properties
# hash. Refer to the bnd documentation (http://www.aqute.biz/Code/Bnd)
# for details on the supported properties.
#
# The easiest way to use this task is through the Project#package method.
# For example:
# package(:bundle).tap do |bnd|
# bnd.bnd_file = 'conf/foo.bnd'
# bnd.classpath = artifacts(...)
# bnd.properties['foo'] = 'bar'
# end
class BndTask < Rake::FileTask
BND = "biz.aQute:bnd:jar:0.0.379"
# Classpath string for building the bundle
attr_accessor :classpath
# Sourcepath
attr_accessor :sourcepath
# Path to bnd file
attr_accessor :bnd_file
# Hash of properties passed to bnd
attr_accessor :properties
def initialize(*args)
super
@properties = {}
# Make sure bnd tool is available
Buildr.artifact(BND).invoke
enhance do
Buildr.ant('bnd') do |project|
# pass properties to bnd as ant properties
properties.each do |key, value|
project.property(:name=>key, :value=>value)
end
project.taskdef :name=>'bnd', :classname=>'aQute.bnd.ant.BndTask', :classpath=>Buildr.artifact(BND)
project.bnd(:classpath=>classpath, :sourcepath=>(sourcepath == nil) ? "" : File.expand_path(sourcepath),
:files=>File.expand_path(bnd_file), :output=>name,
:eclipse=>false, :failok=>false, :exceptions=>true)
end
end
end
end
class Project
def package_as_bundle(file_name) #:nodoc
BndTask.define_task(file_name)
end
def package_as_bundle_spec(spec) #:nodoc
spec.merge({ :type=>:jar, :classifier=>'bundle' })
end
end