|
| 1 | +raise 'Patch already integrated into buildr code' unless Buildr::VERSION.to_s == '1.5.5' |
| 2 | + |
| 3 | +class Buildr::CustomPom |
| 4 | + attr_accessor :dependency_filter |
| 5 | + |
| 6 | + def additional_dependencies |
| 7 | + @additional_dependencies ||= [] |
| 8 | + end |
| 9 | + |
| 10 | + def additional_dependencies=(additional_dependencies) |
| 11 | + @additional_dependencies = additional_dependencies |
| 12 | + end |
| 13 | + |
| 14 | + def include_transitive_dependencies |
| 15 | + @include_transitive_dependencies ||= [] |
| 16 | + end |
| 17 | + |
| 18 | + def include_transitive_dependencies=(include_transitive_dependencies) |
| 19 | + @include_transitive_dependencies = include_transitive_dependencies |
| 20 | + end |
| 21 | + |
| 22 | + def self.pom_xml(project, package) |
| 23 | + Proc.new do |
| 24 | + xml = Builder::XmlMarkup.new(:indent => 2) |
| 25 | + xml.instruct! |
| 26 | + xml.project('xmlns' => 'http://maven.apache.org/POM/4.0.0', |
| 27 | + 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', |
| 28 | + 'xsi:schemaLocation' => 'http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd') do |
| 29 | + xml.modelVersion '4.0.0' |
| 30 | + xml.parent do |
| 31 | + xml.groupId 'org.sonatype.oss' |
| 32 | + xml.artifactId 'oss-parent' |
| 33 | + xml.version '8' |
| 34 | + end |
| 35 | + xml.groupId project.group |
| 36 | + xml.artifactId project.id |
| 37 | + xml.version project.version |
| 38 | + candidates = project.packages.select {|p| p.classifier.nil?}.collect {|p| p.type.to_s} |
| 39 | + packaging = !candidates.empty? ? candidates[0] : (project.compile.packaging || :zip).to_s |
| 40 | + xml.packaging packaging |
| 41 | + |
| 42 | + xml.name project.pom.name if project.pom.name |
| 43 | + xml.description project.pom.description if project.pom.description |
| 44 | + xml.url project.pom.url if project.pom.url |
| 45 | + |
| 46 | + xml.licenses do |
| 47 | + project.pom.licenses.each_pair do |name, url| |
| 48 | + xml.license do |
| 49 | + xml.name name |
| 50 | + xml.url url |
| 51 | + xml.distribution 'repo' |
| 52 | + end |
| 53 | + end |
| 54 | + end unless project.pom.licenses.empty? |
| 55 | + |
| 56 | + if project.pom.scm_url || project.pom.scm_connection || project.pom.scm_developer_connection |
| 57 | + xml.scm do |
| 58 | + xml.connection project.pom.scm_connection if project.pom.scm_connection |
| 59 | + xml.developerConnection project.pom.scm_developer_connection if project.pom.scm_developer_connection |
| 60 | + xml.url project.pom.scm_url if project.pom.scm_url |
| 61 | + end |
| 62 | + end |
| 63 | + |
| 64 | + if project.pom.issues_url |
| 65 | + xml.issueManagement do |
| 66 | + xml.url project.pom.issues_url |
| 67 | + xml.system project.pom.issues_system if project.pom.issues_system |
| 68 | + end |
| 69 | + end |
| 70 | + |
| 71 | + xml.developers do |
| 72 | + project.pom.developers.each do |developer| |
| 73 | + xml.developer do |
| 74 | + xml.id developer.id |
| 75 | + xml.name developer.name if developer.name |
| 76 | + xml.email developer.email if developer.email |
| 77 | + if developer.roles |
| 78 | + xml.roles do |
| 79 | + developer.roles.each do |role| |
| 80 | + xml.role role |
| 81 | + end |
| 82 | + end |
| 83 | + end |
| 84 | + end |
| 85 | + end |
| 86 | + end unless project.pom.developers.empty? |
| 87 | + |
| 88 | + provided_deps = Buildr.artifacts(project.pom.provided_dependencies) |
| 89 | + runtime_deps = Buildr.artifacts(project.pom.runtime_dependencies) |
| 90 | + additional_deps = Buildr.artifacts(project.pom.additional_dependencies) |
| 91 | + include_transitive_deps = Buildr.artifacts(project.pom.include_transitive_dependencies).collect {|dep| dep.to_s} |
| 92 | + optional_deps = Buildr.artifacts(project.pom.optional_dependencies).collect{|dep| dep.to_s} |
| 93 | + |
| 94 | + done = [] |
| 95 | + |
| 96 | + deps = [] |
| 97 | + deps += provided_deps. |
| 98 | + select {|d| d.is_a?(ActsAsArtifact)}. |
| 99 | + select {|d| !done.include?(d.to_s)}. |
| 100 | + collect {|dep| done << dep.to_s; dep.to_hash.merge(:scope => 'provided', :optional => optional_deps.include?(dep.to_s), :include_transitive => include_transitive_deps.include?(dep.to_s), :artifact => dep)} |
| 101 | + deps += runtime_deps. |
| 102 | + select {|d| d.is_a?(ActsAsArtifact)}. |
| 103 | + select {|d| !done.include?(d.to_s)}. |
| 104 | + collect {|dep| done << dep.to_s; dep.to_hash.merge(:scope => 'runtime', :optional => optional_deps.include?(dep.to_s), :include_transitive => include_transitive_deps.include?(dep.to_s), :artifact => dep)} |
| 105 | + deps += additional_deps. |
| 106 | + select {|d| d.is_a?(ActsAsArtifact)}. |
| 107 | + select {|d| !done.include?(d.to_s)}. |
| 108 | + collect {|dep| done << dep.to_s; dep.to_hash.merge(:scope => 'compile', :optional => optional_deps.include?(dep.to_s), :include_transitive => include_transitive_deps.include?(dep.to_s), :artifact => dep)} |
| 109 | + |
| 110 | + deps += |
| 111 | + Buildr.artifacts(project.compile.dependencies). |
| 112 | + select {|d| d.is_a?(ActsAsArtifact)}. |
| 113 | + select {|d| !done.include?(d.to_s)}. |
| 114 | + collect {|d| done << d.to_s; d.to_hash.merge(:scope => 'compile', :optional => optional_deps.include?(d.to_s), :include_transitive => include_transitive_deps.include?(d.to_s), :artifact => d)} |
| 115 | + |
| 116 | + deps += Buildr.artifacts(project.test.compile.dependencies). |
| 117 | + select {|d| d.is_a?(ActsAsArtifact)}. |
| 118 | + select {|d| !done.include?(d.to_s)}. |
| 119 | + collect {|d| d.to_hash.merge(:scope => 'test', :include_transitive => include_transitive_deps.include?(d.to_s), :artifact => d)} |
| 120 | + |
| 121 | + xml.dependencies do |
| 122 | + deps.select {|dependency| project.pom.dependency_filter.nil? ? true : project.pom.dependency_filter.call(dependency)}.each do |dependency| |
| 123 | + xml.dependency do |
| 124 | + xml.groupId dependency[:group] |
| 125 | + xml.artifactId dependency[:id] |
| 126 | + xml.version dependency[:version] |
| 127 | + xml.classifier dependency[:classifier] if dependency[:classifier] && dependency[:classifier].to_s != 'jar' |
| 128 | + xml.scope dependency[:scope] unless dependency[:scope] == 'compile' |
| 129 | + xml.optional true if dependency[:optional] |
| 130 | + unless dependency[:include_transitive] |
| 131 | + xml.exclusions do |
| 132 | + xml.exclusion do |
| 133 | + xml.groupId '*' |
| 134 | + xml.artifactId '*' |
| 135 | + end |
| 136 | + end |
| 137 | + end |
| 138 | + end |
| 139 | + end |
| 140 | + end unless deps.empty? |
| 141 | + end |
| 142 | + end |
| 143 | + end |
| 144 | +end |
0 commit comments