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