blob: 03b637186731935f0ec90ca826b9a2fe35d77781 [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.
module Buildr
#
# Module to add project dependencies to our artifact's pom files.
# Inspired by BUILDR-486 and https://github.com/jvshahid/buildr-dependency-extensions.
#
module PomWithDependencies
include Extension
# We have to add the dependencies to the monkey patched POM before the dependencies are
# changed in the compile, test and run after_define
after_define(:compile) do |project|
deps =
[project.compile.dependencies.select {|dep| dep.respond_to?(:to_spec) && dep.respond_to?(:to_hash)}.map { |a| a.to_hash.merge(:scope => 'compile') },
project.test.dependencies.select {|dep| dep.respond_to?(:to_spec) && dep.respond_to?(:to_hash) && !project.compile.dependencies.include?(dep)}.map { |a| a.to_hash.merge(:scope => 'test') },
project.run.classpath.select {|dep| dep.respond_to?(:to_spec) && dep.respond_to?(:to_hash) && !project.compile.dependencies.include?(dep)}.map { |a| a.to_hash.merge(:scope => 'runtime') }
].flatten
project.packages.each {|pack| pack.pom.dependencies = deps}
end
end
module ActsAsArtifact
# monkey patch Buildr's the pom xml generation
def pom_xml
Proc.new do
xml = Builder::XmlMarkup.new(:indent=>2)
xml.instruct!
xml.project do
xml.modelVersion '4.0.0'
xml.groupId group
xml.artifactId id
xml.version version
xml.classifier classifier if classifier
unless @dependencies.nil? || @dependencies.empty?
xml.dependencies do
@dependencies.uniq.each do |art|
xml.dependency do
xml.groupId art[:group]
xml.artifactId art[:id]
xml.version art[:version]
xml.classifier art[:classifier] if art.has_key? :classifier
xml.scope art[:scope] if art.has_key? :scope
end
end
end
end
end
end
end
# make ActAsArtifac dependency aware
def dependencies=(dependencies)
@dependencies = dependencies
end
def dependencies
@dependencies ||= POM.load(self).dependencies.map { |spec| artifact(spec) } if self.is_a? Artifact
@dependencies ||= []
end
end
end
# use this module for all projects.
class Buildr::Project
include Buildr::PomWithDependencies
end