| # 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. |
| |
| require 'java/java' |
| |
| module Buildr |
| |
| # Provides JiBX bytecode enhancement. Require explicitly using <code>require 'buildr/jibx'</code>. |
| module JiBX |
| |
| JIBX_VERSION = '1.1.5' |
| BCEL_VERSION = '5.2' |
| STAX_VERSION = '1.0-2' |
| XPP3_VERSION = '1.1.4c' |
| |
| REQUIRES = ["org.jibx:jibx-bind:jar:#{JIBX_VERSION}", |
| "org.jibx:jibx-run:jar:#{JIBX_VERSION}", |
| "org.apache.bcel:bcel:jar:#{BCEL_VERSION}", |
| "javax.xml.stream:stax-api:jar:#{STAX_VERSION}", |
| "xpp3:xpp3:jar:#{XPP3_VERSION}"] |
| |
| Java.classpath << REQUIRES |
| |
| class << self |
| |
| def bind(options) |
| rake_check_options options, :classpath, :output, :binding, :target, :verbose, :load |
| artifacts = Buildr.artifacts(options[:classpath]).each { |a| a.invoke }.map(&:to_s) + [options[:output].to_s] |
| binding = file(options[:binding]).tap { |task| task.invoke }.to_s |
| |
| Buildr.ant 'jibx' do |ant| |
| ant.taskdef :name=>'bind', |
| :classname=>'org.jibx.binding.ant.CompileTask', |
| :classpath => requires.join(File::PATH_SEPARATOR) |
| ant.bind :verbose => options[:verbose].to_s, :load => options[:load].to_s, :binding=>options[:binding].to_s do |
| ant.classpath :path => artifacts.join(File::PATH_SEPARATOR) |
| end |
| end |
| end |
| |
| private |
| |
| def requires() |
| @requires ||= Buildr.artifacts(REQUIRES).each { |artifact| artifact.invoke }.map(&:to_s) |
| end |
| |
| end |
| |
| def jibx_bind(options = nil) |
| |
| # FIXME - add support for :bindingfileset and :classpathset |
| # Note: either :binding or :bindingfileset should be set, and either |
| # :classpath or :classpathset should be set, and options passed to |
| # ant.bind should be adjusted accordingly. At present, only :binding |
| # and :classpath are supported (which should be fine for most!) |
| jibx_options = {:output => compile.target, |
| :classpath => compile.classpath, |
| :binding => path_to(:source, :main, :resources, 'META-INF/binding.xml'), |
| :target => compile.target, |
| :load => false, |
| :verbose => false |
| } |
| |
| JiBX.bind jibx_options.merge(options || {}) |
| end |
| |
| end |
| |
| class Project |
| include JiBX |
| end |
| end |