Repository: buildr Updated Branches: refs/heads/master 5ba7e9a50 -> 14116ad04
BUILDR-729 Integrate into core and just make it the default pom generated. Project: http://git-wip-us.apache.org/repos/asf/buildr/repo Commit: http://git-wip-us.apache.org/repos/asf/buildr/commit/14116ad0 Tree: http://git-wip-us.apache.org/repos/asf/buildr/tree/14116ad0 Diff: http://git-wip-us.apache.org/repos/asf/buildr/diff/14116ad0 Branch: refs/heads/master Commit: 14116ad04aa02baddc990b6440f948f50396c51d Parents: 5ba7e9a Author: Antoine Toulme <[email protected]> Authored: Mon Feb 6 22:14:13 2017 -0800 Committer: Antoine Toulme <[email protected]> Committed: Mon Feb 13 22:52:06 2017 -0800 ---------------------------------------------------------------------- CHANGELOG | 1 + addon/buildr/custom_pom.rb | 275 +---------------------------------- lib/buildr.rb | 1 + lib/buildr/java/custom_pom.rb | 287 +++++++++++++++++++++++++++++++++++++ spec/addon/custom_pom_spec.rb | 185 ------------------------ spec/java/custom_pom_spec.rb | 185 ++++++++++++++++++++++++ 6 files changed, 477 insertions(+), 457 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/buildr/blob/14116ad0/CHANGELOG ---------------------------------------------------------------------- diff --git a/CHANGELOG b/CHANGELOG index ec9cef6..84a70ef 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -7,6 +7,7 @@ * Change: BUILDR-724 Use scalamain to call scala projects * Change: BUILDR-719 Change User-Agent when uploading artifacts * Change: Set the OPEN_IN_BROWSER to false when building idea launch targets via add_glassfish_remote_configuration. +* Change: BUILDR-709 Integrate `buildr/custom_pom` into core and just make it the default pom generated. 1.5.0 (2016-09-23) * Change: Update RJB to 1.5.4 http://git-wip-us.apache.org/repos/asf/buildr/blob/14116ad0/addon/buildr/custom_pom.rb ---------------------------------------------------------------------- diff --git a/addon/buildr/custom_pom.rb b/addon/buildr/custom_pom.rb index b60f5ee..885bfb8 100644 --- a/addon/buildr/custom_pom.rb +++ b/addon/buildr/custom_pom.rb @@ -13,275 +13,6 @@ # License for the specific language governing permissions and limitations under # the License. -module Buildr - class CustomPom - Developer = Struct.new(:id, :name, :email, :roles) - - # Specify the name of the project - attr_writer :name - - # Retrieve the name of the project, defaulting to the project description or the name if not specified - def name - @name || @buildr_project.comment || @buildr_project.name - end - - # Specify a project description - attr_writer :description - - # Retrieve the project description, defaulting to the name if not specified - def description - @description || name - end - - # Property for the projects url - attr_accessor :url - - # Return the map of licenses for project - def licenses - @licenses ||= {} - end - - # Add Apache2 to the list of licenses - def add_apache_v2_license - self.licenses['The Apache Software License, Version 2.0'] = 'http://www.apache.org/licenses/LICENSE-2.0.txt' - end - - def add_bsd_2_license - self.licenses['The BSD 2-Clause License'] = 'http://opensource.org/licenses/BSD-2-Clause' - end - - def add_bsd_3_license - self.licenses['The BSD 3-Clause License'] = 'http://opensource.org/licenses/BSD-3-Clause' - end - - def add_cddl_v1_license - self.licenses['Common Development and Distribution License (CDDL-1.0)'] = 'http://opensource.org/licenses/CDDL-1.0' - end - - def add_epl_v1_license - self.licenses['Eclipse Public License - v 1.0'] = 'http://www.eclipse.org/legal/epl-v10.html' - end - - def add_gpl_v1_license - self.licenses['GNU General Public License (GPL) version 1.0'] = 'http://www.gnu.org/licenses/gpl-1.0.html' - end - - def add_gpl_v2_license - self.licenses['GNU General Public License (GPL) version 2.0'] = 'http://www.gnu.org/licenses/gpl-2.0.html' - end - - def add_gpl_v3_license - self.licenses['GNU General Public License (GPL) version 3.0'] = 'http://www.gnu.org/licenses/gpl-3.0.html' - end - - def add_lgpl_v2_license - self.licenses['GNU General Lesser Public License (LGPL) version 2.1'] = 'http://www.gnu.org/licenses/lgpl-2.1.html' - end - - def add_lgpl_v3_license - self.licenses['GNU General Lesser Public License (LGPL) version 3.0'] = 'http://www.gnu.org/licenses/lgpl-3.0.html' - end - - def add_mit_license - self.licenses['The MIT License'] = 'http://opensource.org/licenses/MIT' - end - - attr_accessor :scm_url - attr_accessor :scm_connection - attr_accessor :scm_developer_connection - - attr_accessor :issues_url - attr_accessor :issues_system - - # Add a project like add_github_project('realityforge/gwt-appcache') - def add_github_project(project_spec) - git_url = "[email protected]:#{project_spec}.git" - self.scm_connection = self.scm_developer_connection = "scm:git:#{git_url}" - self.scm_url = git_url - web_url = "https://github.com/#{project_spec}" - self.url = web_url - self.issues_url = "#{web_url}/issues" - self.issues_system = 'GitHub Issues' - end - - def developers - @developers ||= [] - end - - def add_developer(id, name = nil, email = nil, roles = nil) - self.developers << Developer.new(id, name, email, roles) - end - - def provided_dependencies - @provided_dependencies ||= [] - end - - def provided_dependencies=(provided_dependencies) - @provided_dependencies = provided_dependencies - end - - def runtime_dependencies - @runtime_dependencies ||= [] - end - - def runtime_dependencies=(runtime_dependencies) - @runtime_dependencies = runtime_dependencies - end - - def optional_dependencies - @optional_dependencies ||= [] - end - - def optional_dependencies=(optional_dependencies) - @optional_dependencies = optional_dependencies - end - - protected - - def associate_project(buildr_project) - @buildr_project = buildr_project - end - - def self.pom_xml(project, package) - Proc.new do - xml = Builder::XmlMarkup.new(:indent => 2) - xml.instruct! - xml.project('xmlns' => 'http://maven.apache.org/POM/4.0.0', - 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', - 'xsi:schemaLocation' => 'http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd') do - xml.modelVersion '4.0.0' - xml.parent do - xml.groupId 'org.sonatype.oss' - xml.artifactId 'oss-parent' - xml.version '7' - end - xml.groupId project.group - xml.artifactId project.id - xml.version project.version - xml.packaging package.type.to_s - xml.classifier package.classifier if package.classifier - - xml.name project.pom.name if project.pom.name - xml.description project.pom.description if project.pom.description - xml.url project.pom.url if project.pom.url - - xml.licenses do - project.pom.licenses.each_pair do |name, url| - xml.license do - xml.name name - xml.url url - xml.distribution 'repo' - end - end - end - - if project.pom.scm_url || project.pom.scm_connection || project.pom.scm_developer_connection - xml.scm do - xml.connection project.pom.scm_connection if project.pom.scm_connection - xml.developerConnection project.pom.scm_developer_connection if project.pom.scm_developer_connection - xml.url project.pom.scm_url if project.pom.scm_url - end - end - - if project.pom.issues_url - xml.issueManagement do - xml.url project.pom.issues_url - xml.system project.pom.issues_system if project.pom.issues_system - end - end - - xml.developers do - project.pom.developers.each do |developer| - xml.developer do - xml.id developer.id - xml.name developer.name if developer.name - xml.email developer.email if developer.email - if developer.roles - xml.roles do - developer.roles.each do |role| - xml.role role - end - end - end - end - end - end - - xml.dependencies do - provided_deps = Buildr.artifacts(project.pom.provided_dependencies).collect { |d| d.to_s } - runtime_deps = Buildr.artifacts(project.pom.runtime_dependencies).collect { |d| d.to_s } - optional_deps = Buildr.artifacts(project.pom.optional_dependencies).collect { |d| d.to_s } - deps = - Buildr.artifacts(project.compile.dependencies). - select { |d| d.is_a?(ActsAsArtifact) }. - collect do |d| - f = d.to_s - scope = provided_deps.include?(f) ? 'provided' : - runtime_deps.include?(f) ? 'runtime' : - 'compile' - d.to_hash.merge(:scope => scope, :optional => optional_deps.include?(f)) - end + Buildr.artifacts(project.test.compile.dependencies). - select { |d| d.is_a?(ActsAsArtifact) && !project.compile.dependencies.include?(d) }.collect { |d| d.to_hash.merge(:scope => 'test') } - deps.each do |dependency| - xml.dependency do - xml.groupId dependency[:group] - xml.artifactId dependency[:id] - xml.version dependency[:version] - xml.scope dependency[:scope] unless dependency[:scope] == 'compile' - xml.optional true if dependency[:optional] - xml.exclusions do - xml.exclusion do - xml.groupId '*' - xml.artifactId '*' - end - end - end - end - end - end - end - end - end - module CPom - module ProjectExtension - include Extension - - def pom - unless @pom - @pom = parent ? parent.pom.dup : Buildr::CustomPom.new - @pom.send :associate_project, self - end - @pom - end - - after_define do |project| - project.packages.each do |pkg| - if pkg.type.to_s == 'jar' && pkg.classifier.nil? - class << pkg - def pom_xml - self.pom.content - end - - def pom - unless @pom - pom_filename = Util.replace_extension(name, 'pom') - spec = {:group => group, :id => id, :version => version, :type => :pom} - @pom = Buildr.artifact(spec, pom_filename) - buildr_project = Buildr.project(self.scope.join(':')) - @pom.content Buildr::CustomPom.pom_xml(buildr_project, self) - end - @pom - end - end - pkg.instance_variable_set('@pom', nil) - pkg.enhance([pkg.pom.to_s]) - end - end - end - end - end -end - -class Buildr::Project - include Buildr::CPom::ProjectExtension -end +msg = "This extension is now included as part of the core Buildr library" +raise msg if (Buildr::VERSION >= "1.6") +warn(msg) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/buildr/blob/14116ad0/lib/buildr.rb ---------------------------------------------------------------------- diff --git a/lib/buildr.rb b/lib/buildr.rb index 2bd5875..a5dbcd2 100644 --- a/lib/buildr.rb +++ b/lib/buildr.rb @@ -84,6 +84,7 @@ require 'buildr/java/packaging' require 'buildr/java/commands' require 'buildr/java/doc' require 'buildr/java/deprecated' +require 'buildr/java/custom_pom' require 'buildr/ide/idea' require 'buildr/ide/eclipse' http://git-wip-us.apache.org/repos/asf/buildr/blob/14116ad0/lib/buildr/java/custom_pom.rb ---------------------------------------------------------------------- diff --git a/lib/buildr/java/custom_pom.rb b/lib/buildr/java/custom_pom.rb new file mode 100644 index 0000000..739d95a --- /dev/null +++ b/lib/buildr/java/custom_pom.rb @@ -0,0 +1,287 @@ +# 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 + class CustomPom + Developer = Struct.new(:id, :name, :email, :roles) + + # Specify the name of the project + attr_writer :name + + # Retrieve the name of the project, defaulting to the project description or the name if not specified + def name + @name || @buildr_project.comment || @buildr_project.name + end + + # Specify a project description + attr_writer :description + + # Retrieve the project description, defaulting to the name if not specified + def description + @description || name + end + + # Property for the projects url + attr_accessor :url + + # Return the map of licenses for project + def licenses + @licenses ||= {} + end + + # Add Apache2 to the list of licenses + def add_apache_v2_license + self.licenses['The Apache Software License, Version 2.0'] = 'http://www.apache.org/licenses/LICENSE-2.0.txt' + end + + def add_bsd_2_license + self.licenses['The BSD 2-Clause License'] = 'http://opensource.org/licenses/BSD-2-Clause' + end + + def add_bsd_3_license + self.licenses['The BSD 3-Clause License'] = 'http://opensource.org/licenses/BSD-3-Clause' + end + + def add_cddl_v1_license + self.licenses['Common Development and Distribution License (CDDL-1.0)'] = 'http://opensource.org/licenses/CDDL-1.0' + end + + def add_epl_v1_license + self.licenses['Eclipse Public License - v 1.0'] = 'http://www.eclipse.org/legal/epl-v10.html' + end + + def add_gpl_v1_license + self.licenses['GNU General Public License (GPL) version 1.0'] = 'http://www.gnu.org/licenses/gpl-1.0.html' + end + + def add_gpl_v2_license + self.licenses['GNU General Public License (GPL) version 2.0'] = 'http://www.gnu.org/licenses/gpl-2.0.html' + end + + def add_gpl_v3_license + self.licenses['GNU General Public License (GPL) version 3.0'] = 'http://www.gnu.org/licenses/gpl-3.0.html' + end + + def add_lgpl_v2_license + self.licenses['GNU General Lesser Public License (LGPL) version 2.1'] = 'http://www.gnu.org/licenses/lgpl-2.1.html' + end + + def add_lgpl_v3_license + self.licenses['GNU General Lesser Public License (LGPL) version 3.0'] = 'http://www.gnu.org/licenses/lgpl-3.0.html' + end + + def add_mit_license + self.licenses['The MIT License'] = 'http://opensource.org/licenses/MIT' + end + + attr_accessor :scm_url + attr_accessor :scm_connection + attr_accessor :scm_developer_connection + + attr_accessor :issues_url + attr_accessor :issues_system + + # Add a project like add_github_project('realityforge/gwt-appcache') + def add_github_project(project_spec) + git_url = "[email protected]:#{project_spec}.git" + self.scm_connection = self.scm_developer_connection = "scm:git:#{git_url}" + self.scm_url = git_url + web_url = "https://github.com/#{project_spec}" + self.url = web_url + self.issues_url = "#{web_url}/issues" + self.issues_system = 'GitHub Issues' + end + + def developers + @developers ||= [] + end + + def add_developer(id, name = nil, email = nil, roles = nil) + self.developers << Developer.new(id, name, email, roles) + end + + def provided_dependencies + @provided_dependencies ||= [] + end + + def provided_dependencies=(provided_dependencies) + @provided_dependencies = provided_dependencies + end + + def runtime_dependencies + @runtime_dependencies ||= [] + end + + def runtime_dependencies=(runtime_dependencies) + @runtime_dependencies = runtime_dependencies + end + + def optional_dependencies + @optional_dependencies ||= [] + end + + def optional_dependencies=(optional_dependencies) + @optional_dependencies = optional_dependencies + end + + protected + + def associate_project(buildr_project) + @buildr_project = buildr_project + end + + def self.pom_xml(project, package) + Proc.new do + xml = Builder::XmlMarkup.new(:indent => 2) + xml.instruct! + xml.project('xmlns' => 'http://maven.apache.org/POM/4.0.0', + 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', + 'xsi:schemaLocation' => 'http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd') do + xml.modelVersion '4.0.0' + xml.parent do + xml.groupId 'org.sonatype.oss' + xml.artifactId 'oss-parent' + xml.version '7' + end + xml.groupId project.group + xml.artifactId project.id + xml.version project.version + xml.packaging package.type.to_s + xml.classifier package.classifier if package.classifier + + xml.name project.pom.name if project.pom.name + xml.description project.pom.description if project.pom.description + xml.url project.pom.url if project.pom.url + + xml.licenses do + project.pom.licenses.each_pair do |name, url| + xml.license do + xml.name name + xml.url url + xml.distribution 'repo' + end + end + end + + if project.pom.scm_url || project.pom.scm_connection || project.pom.scm_developer_connection + xml.scm do + xml.connection project.pom.scm_connection if project.pom.scm_connection + xml.developerConnection project.pom.scm_developer_connection if project.pom.scm_developer_connection + xml.url project.pom.scm_url if project.pom.scm_url + end + end + + if project.pom.issues_url + xml.issueManagement do + xml.url project.pom.issues_url + xml.system project.pom.issues_system if project.pom.issues_system + end + end + + xml.developers do + project.pom.developers.each do |developer| + xml.developer do + xml.id developer.id + xml.name developer.name if developer.name + xml.email developer.email if developer.email + if developer.roles + xml.roles do + developer.roles.each do |role| + xml.role role + end + end + end + end + end + end + + xml.dependencies do + provided_deps = Buildr.artifacts(project.pom.provided_dependencies).collect { |d| d.to_s } + runtime_deps = Buildr.artifacts(project.pom.runtime_dependencies).collect { |d| d.to_s } + optional_deps = Buildr.artifacts(project.pom.optional_dependencies).collect { |d| d.to_s } + deps = + Buildr.artifacts(project.compile.dependencies). + select { |d| d.is_a?(ActsAsArtifact) }. + collect do |d| + f = d.to_s + scope = provided_deps.include?(f) ? 'provided' : + runtime_deps.include?(f) ? 'runtime' : + 'compile' + d.to_hash.merge(:scope => scope, :optional => optional_deps.include?(f)) + end + Buildr.artifacts(project.test.compile.dependencies). + select { |d| d.is_a?(ActsAsArtifact) && !project.compile.dependencies.include?(d) }.collect { |d| d.to_hash.merge(:scope => 'test') } + deps.each do |dependency| + xml.dependency do + xml.groupId dependency[:group] + xml.artifactId dependency[:id] + xml.version dependency[:version] + xml.scope dependency[:scope] unless dependency[:scope] == 'compile' + xml.optional true if dependency[:optional] + xml.exclusions do + xml.exclusion do + xml.groupId '*' + xml.artifactId '*' + end + end + end + end + end + end + end + end + end + module CPom + module ProjectExtension + include Extension + + def pom + unless @pom + @pom = parent ? parent.pom.dup : Buildr::CustomPom.new + @pom.send :associate_project, self + end + @pom + end + + after_define do |project| + project.packages.select { |pkg| pkg.is_a?(ActsAsArtifact) }.each do |pkg| + if pkg.type.to_s == 'jar' && pkg.classifier.nil? + class << pkg + def pom_xml + self.pom.content + end + + def pom + unless @pom + pom_filename = Util.replace_extension(name, 'pom') + spec = {:group => group, :id => id, :version => version, :type => :pom} + @pom = Buildr.artifact(spec, pom_filename) + buildr_project = Buildr.project(self.scope.join(':')) + @pom.content Buildr::CustomPom.pom_xml(buildr_project, self) + end + @pom + end + end + pkg.instance_variable_set('@pom', nil) + pkg.enhance([pkg.pom.to_s]) + end + end + end + end + end +end + +class Buildr::Project + include Buildr::CPom::ProjectExtension +end http://git-wip-us.apache.org/repos/asf/buildr/blob/14116ad0/spec/addon/custom_pom_spec.rb ---------------------------------------------------------------------- diff --git a/spec/addon/custom_pom_spec.rb b/spec/addon/custom_pom_spec.rb deleted file mode 100644 index 25e2cf5..0000000 --- a/spec/addon/custom_pom_spec.rb +++ /dev/null @@ -1,185 +0,0 @@ -# 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. - -# The testing framework does not support loading and then unloading of addons -# thus we can not test this addon until we figure out a mechanism of supporting -# unloading addon as the test progresses -if false - -require File.expand_path('../spec_helpers', File.dirname(__FILE__)) -require File.expand_path(File.join(File.dirname(__FILE__), '..', 'xpath_matchers')) - -# Next line should work but does not -#Sandbox.require_optional_extension 'buildr/custom_pom' - -# Next line should not be used but is required -require 'buildr/custom_pom' - -describe Buildr::CustomPom do - - def xml_document(filename) - File.should be_exist(filename) - REXML::Document.new(File.read(filename)) - end - - def project_pom_xml(project) - xml_document(project.packages[0].pom.to_s) - end - - def verify_license(pom_xml, name, url) - pom_xml.should match_xpath("/project/licenses/license/url[../name/text() = '#{name}']", url) - end - - def dependency_xpath(artifact_id) - "/project/dependencies/dependency[artifactId/text() = '#{artifact_id}']" - end - - def verify_dependency_group(pom_xml, artifact_id, group) - pom_xml.should match_xpath("#{dependency_xpath(artifact_id)}/groupId", group) - end - - def verify_dependency_version(pom_xml, artifact_id, version) - pom_xml.should match_xpath("#{dependency_xpath(artifact_id)}/version", version) - end - - def verify_dependency_scope(pom_xml, artifact_id, scope) - pom_xml.should match_xpath("#{dependency_xpath(artifact_id)}/scope", scope) - end - - def verify_dependency_optional(pom_xml, artifact_id, optional) - pom_xml.should match_xpath("#{dependency_xpath(artifact_id)}/optional", optional) - end - - def verify_dependency(pom_xml, artifact_id, group, version, scope, optional) - verify_dependency_group(pom_xml, artifact_id, group) - verify_dependency_version(pom_xml, artifact_id, version) - verify_dependency_scope(pom_xml, artifact_id, scope) - verify_dependency_optional(pom_xml, artifact_id, optional) - pom_xml.should match_xpath("#{dependency_xpath(artifact_id)}/exclusions/exclusion/groupId", '*') - pom_xml.should match_xpath("#{dependency_xpath(artifact_id)}/exclusions/exclusion/artifactId", '*') - end - - describe 'with explicitly specified pom details' do - before do - %w(id-provided id-optional id-runtime id-test).each do |artifact_id| - artifact("group:#{artifact_id}:jar:1.0") do |t| - mkdir_p File.dirname(t.to_s) - Zip::OutputStream.open t.to_s do |zip| - zip.put_next_entry 'empty.txt' - end - end - end - write 'src/main/java/Example.java', 'public class Example {}' - - @foo = define 'foo' do - project.group = 'org.myproject' - project.version = '1.0' - - pom.licenses['The Apache Software License, Version 2.0'] = 'http://www.apache.org/licenses/LICENSE-2.0.txt' - pom.licenses['GNU General Public License (GPL) version 3.0'] = 'http://www.gnu.org/licenses/gpl-3.0.html' - pom.scm_connection = pom.scm_developer_connection = 'scm:git:[email protected]:jbloggs/myproject' - pom.scm_url = '[email protected]:jbloggs/myproject' - pom.url = 'https://github.com/jbloggs/myproject' - pom.issues_url = 'https://github.com/jbloggs/myproject/issues' - pom.issues_system = 'GitHub Issues' - pom.add_developer('jbloggs', 'Joe Bloggs', '[email protected]', ['Project Lead']) - pom.provided_dependencies = ['group:id-provided:jar:1.0'] - pom.optional_dependencies = ['group:id-optional:jar:1.0'] - - compile.with 'group:id-runtime:jar:1.0', 'group:id-optional:jar:1.0', 'group:id-provided:jar:1.0' - - test.with 'group:id-test:jar:1.0' - - package(:jar) - end - task('package').invoke - @pom_xml = project_pom_xml(@foo) - #$stderr.puts @pom_xml.to_s - end - - it 'has correct static metadata' do - @pom_xml.should match_xpath('/project/modelVersion', '4.0.0') - @pom_xml.should match_xpath('/project/parent/groupId', 'org.sonatype.oss') - @pom_xml.should match_xpath('/project/parent/artifactId', 'oss-parent') - @pom_xml.should match_xpath('/project/parent/version', '7') - end - - it 'has correct project level metadata' do - @pom_xml.should match_xpath('/project/groupId', 'org.myproject') - @pom_xml.should match_xpath('/project/artifactId', 'foo') - @pom_xml.should match_xpath('/project/version', '1.0') - @pom_xml.should match_xpath('/project/packaging', 'jar') - @pom_xml.should match_xpath('/project/name', 'foo') - @pom_xml.should match_xpath('/project/description', 'foo') - @pom_xml.should match_xpath('/project/url', 'https://github.com/jbloggs/myproject') - end - - it 'has correct scm details' do - @pom_xml.should match_xpath('/project/scm/connection', 'scm:git:[email protected]:jbloggs/myproject') - @pom_xml.should match_xpath('/project/scm/developerConnection', 'scm:git:[email protected]:jbloggs/myproject') - @pom_xml.should match_xpath('/project/scm/url', '[email protected]:jbloggs/myproject') - end - - it 'has correct issueManagement details' do - @pom_xml.should match_xpath('/project/issueManagement/url', 'https://github.com/jbloggs/myproject/issues') - @pom_xml.should match_xpath('/project/issueManagement/system', 'GitHub Issues') - end - - it 'has correct developers details' do - @pom_xml.should match_xpath('/project/developers/developer/id', 'jbloggs') - @pom_xml.should match_xpath('/project/developers/developer/name', 'Joe Bloggs') - @pom_xml.should match_xpath('/project/developers/developer/email', '[email protected]') - @pom_xml.should match_xpath('/project/developers/developer/roles/role', 'Project Lead') - end - - it 'has correct license details' do - verify_license(@pom_xml, 'The Apache Software License, Version 2.0', 'http://www.apache.org/licenses/LICENSE-2.0.txt') - verify_license(@pom_xml, 'GNU General Public License (GPL) version 3.0', 'http://www.gnu.org/licenses/gpl-3.0.html') - end - - it 'has correct dependency details' do - verify_dependency(@pom_xml, 'id-runtime', 'group', '1.0', nil, nil) - verify_dependency(@pom_xml, 'id-optional', 'group', '1.0', nil, 'true') - verify_dependency(@pom_xml, 'id-provided', 'group', '1.0', 'provided', nil) - verify_dependency(@pom_xml, 'id-test', 'group', '1.0', 'test', nil) - end - end - - describe 'with a multi-module project' do - before do - write 'foo/src/main/java/Foo.java', 'public class Foo {}' - write 'bar/src/main/java/Bar.java', 'public class Bar {}' - define('myproject', :group => 'group', :version => '1.0') do - define('foo') do - package(:jar) - end - define(:bar) do - compile.with project('foo') - package(:jar) - pom.description = 'BAR Project' - end - end - task('package').invoke - - @pom_xml = project_pom_xml(project('myproject:bar')) - end - - it 'should add foo to the dependencies of bar\'s pom.xml' do - verify_dependency(@pom_xml, 'myproject-foo', 'group', '1.0', nil, nil) - end - end -end - -end http://git-wip-us.apache.org/repos/asf/buildr/blob/14116ad0/spec/java/custom_pom_spec.rb ---------------------------------------------------------------------- diff --git a/spec/java/custom_pom_spec.rb b/spec/java/custom_pom_spec.rb new file mode 100644 index 0000000..25e2cf5 --- /dev/null +++ b/spec/java/custom_pom_spec.rb @@ -0,0 +1,185 @@ +# 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. + +# The testing framework does not support loading and then unloading of addons +# thus we can not test this addon until we figure out a mechanism of supporting +# unloading addon as the test progresses +if false + +require File.expand_path('../spec_helpers', File.dirname(__FILE__)) +require File.expand_path(File.join(File.dirname(__FILE__), '..', 'xpath_matchers')) + +# Next line should work but does not +#Sandbox.require_optional_extension 'buildr/custom_pom' + +# Next line should not be used but is required +require 'buildr/custom_pom' + +describe Buildr::CustomPom do + + def xml_document(filename) + File.should be_exist(filename) + REXML::Document.new(File.read(filename)) + end + + def project_pom_xml(project) + xml_document(project.packages[0].pom.to_s) + end + + def verify_license(pom_xml, name, url) + pom_xml.should match_xpath("/project/licenses/license/url[../name/text() = '#{name}']", url) + end + + def dependency_xpath(artifact_id) + "/project/dependencies/dependency[artifactId/text() = '#{artifact_id}']" + end + + def verify_dependency_group(pom_xml, artifact_id, group) + pom_xml.should match_xpath("#{dependency_xpath(artifact_id)}/groupId", group) + end + + def verify_dependency_version(pom_xml, artifact_id, version) + pom_xml.should match_xpath("#{dependency_xpath(artifact_id)}/version", version) + end + + def verify_dependency_scope(pom_xml, artifact_id, scope) + pom_xml.should match_xpath("#{dependency_xpath(artifact_id)}/scope", scope) + end + + def verify_dependency_optional(pom_xml, artifact_id, optional) + pom_xml.should match_xpath("#{dependency_xpath(artifact_id)}/optional", optional) + end + + def verify_dependency(pom_xml, artifact_id, group, version, scope, optional) + verify_dependency_group(pom_xml, artifact_id, group) + verify_dependency_version(pom_xml, artifact_id, version) + verify_dependency_scope(pom_xml, artifact_id, scope) + verify_dependency_optional(pom_xml, artifact_id, optional) + pom_xml.should match_xpath("#{dependency_xpath(artifact_id)}/exclusions/exclusion/groupId", '*') + pom_xml.should match_xpath("#{dependency_xpath(artifact_id)}/exclusions/exclusion/artifactId", '*') + end + + describe 'with explicitly specified pom details' do + before do + %w(id-provided id-optional id-runtime id-test).each do |artifact_id| + artifact("group:#{artifact_id}:jar:1.0") do |t| + mkdir_p File.dirname(t.to_s) + Zip::OutputStream.open t.to_s do |zip| + zip.put_next_entry 'empty.txt' + end + end + end + write 'src/main/java/Example.java', 'public class Example {}' + + @foo = define 'foo' do + project.group = 'org.myproject' + project.version = '1.0' + + pom.licenses['The Apache Software License, Version 2.0'] = 'http://www.apache.org/licenses/LICENSE-2.0.txt' + pom.licenses['GNU General Public License (GPL) version 3.0'] = 'http://www.gnu.org/licenses/gpl-3.0.html' + pom.scm_connection = pom.scm_developer_connection = 'scm:git:[email protected]:jbloggs/myproject' + pom.scm_url = '[email protected]:jbloggs/myproject' + pom.url = 'https://github.com/jbloggs/myproject' + pom.issues_url = 'https://github.com/jbloggs/myproject/issues' + pom.issues_system = 'GitHub Issues' + pom.add_developer('jbloggs', 'Joe Bloggs', '[email protected]', ['Project Lead']) + pom.provided_dependencies = ['group:id-provided:jar:1.0'] + pom.optional_dependencies = ['group:id-optional:jar:1.0'] + + compile.with 'group:id-runtime:jar:1.0', 'group:id-optional:jar:1.0', 'group:id-provided:jar:1.0' + + test.with 'group:id-test:jar:1.0' + + package(:jar) + end + task('package').invoke + @pom_xml = project_pom_xml(@foo) + #$stderr.puts @pom_xml.to_s + end + + it 'has correct static metadata' do + @pom_xml.should match_xpath('/project/modelVersion', '4.0.0') + @pom_xml.should match_xpath('/project/parent/groupId', 'org.sonatype.oss') + @pom_xml.should match_xpath('/project/parent/artifactId', 'oss-parent') + @pom_xml.should match_xpath('/project/parent/version', '7') + end + + it 'has correct project level metadata' do + @pom_xml.should match_xpath('/project/groupId', 'org.myproject') + @pom_xml.should match_xpath('/project/artifactId', 'foo') + @pom_xml.should match_xpath('/project/version', '1.0') + @pom_xml.should match_xpath('/project/packaging', 'jar') + @pom_xml.should match_xpath('/project/name', 'foo') + @pom_xml.should match_xpath('/project/description', 'foo') + @pom_xml.should match_xpath('/project/url', 'https://github.com/jbloggs/myproject') + end + + it 'has correct scm details' do + @pom_xml.should match_xpath('/project/scm/connection', 'scm:git:[email protected]:jbloggs/myproject') + @pom_xml.should match_xpath('/project/scm/developerConnection', 'scm:git:[email protected]:jbloggs/myproject') + @pom_xml.should match_xpath('/project/scm/url', '[email protected]:jbloggs/myproject') + end + + it 'has correct issueManagement details' do + @pom_xml.should match_xpath('/project/issueManagement/url', 'https://github.com/jbloggs/myproject/issues') + @pom_xml.should match_xpath('/project/issueManagement/system', 'GitHub Issues') + end + + it 'has correct developers details' do + @pom_xml.should match_xpath('/project/developers/developer/id', 'jbloggs') + @pom_xml.should match_xpath('/project/developers/developer/name', 'Joe Bloggs') + @pom_xml.should match_xpath('/project/developers/developer/email', '[email protected]') + @pom_xml.should match_xpath('/project/developers/developer/roles/role', 'Project Lead') + end + + it 'has correct license details' do + verify_license(@pom_xml, 'The Apache Software License, Version 2.0', 'http://www.apache.org/licenses/LICENSE-2.0.txt') + verify_license(@pom_xml, 'GNU General Public License (GPL) version 3.0', 'http://www.gnu.org/licenses/gpl-3.0.html') + end + + it 'has correct dependency details' do + verify_dependency(@pom_xml, 'id-runtime', 'group', '1.0', nil, nil) + verify_dependency(@pom_xml, 'id-optional', 'group', '1.0', nil, 'true') + verify_dependency(@pom_xml, 'id-provided', 'group', '1.0', 'provided', nil) + verify_dependency(@pom_xml, 'id-test', 'group', '1.0', 'test', nil) + end + end + + describe 'with a multi-module project' do + before do + write 'foo/src/main/java/Foo.java', 'public class Foo {}' + write 'bar/src/main/java/Bar.java', 'public class Bar {}' + define('myproject', :group => 'group', :version => '1.0') do + define('foo') do + package(:jar) + end + define(:bar) do + compile.with project('foo') + package(:jar) + pom.description = 'BAR Project' + end + end + task('package').invoke + + @pom_xml = project_pom_xml(project('myproject:bar')) + end + + it 'should add foo to the dependencies of bar\'s pom.xml' do + verify_dependency(@pom_xml, 'myproject-foo', 'group', '1.0', nil, nil) + end + end +end + +end
