class DMAndPMManagementForExternalConfiguration @@reactorHandler = ReactorHandler.new @@mvnReactorization = MvnReactorization.new @@cordinateArr = Array.new def getParentCordinates(externalPomUrl,tag) pom_document = Nokogiri::XML(open(externalPomUrl)) if tag == "dependency" getCordinatesListFromEffectivepom(pom_document) else @@cordinateArr=Array.new getCordinatesFromParentPlugin(pom_document,"project/build/pluginManagement/plugins/plugin") getCordinatesFromParentPlugin(pom_document,"project/build/plugins/plugin") end return @@cordinateArr.uniq end def getCordinatesListFromEffectivepom(pom_document) pom_document.css("project/dependencyManagement/dependencies/dependency").each do |eachDependency| grpId = eachDependency.at("groupId").text artId = eachDependency.at("artifactId").text version = eachDependency.at("version").text fullDependency = "#{grpId}:#{artId}:#{version}" @@cordinateArr.push(fullDependency) end findParent(pom_document,"dependency") end def findParent(pom_document,tag) if @@reactorHandler.tag_exists?('project/parent', pom_document) dependencyHandler = DependencyHandler.new parentPom = dependencyHandler.getParentPomDomObjFromUrl(pom_document) if tag == "dependency" getCordinatesListFromEffectivepom(parentPom) else getCordinatesFromParentPlugin(parentPom,"project/build/pluginManagement/plugins/plugin") getCordinatesFromParentPlugin(parentPom,"project/build/plugins/plugin") end else puts ":::::::::::End of Searching::::::" end end def getCordinatesFromParentPlugin(pom_document,tag) pom_document.css(tag).each do |eachPlugin| grpId=nil if (eachPlugin.at("groupId").nil?) grpId="org.apache.maven.plugins" else grpId = eachPlugin.at("groupId").text end artifactId = eachPlugin.at("artifactId").text version=nil if (!eachPlugin.at("version").nil? and eachPlugin.at("version").parent.name=="plugin") version = eachPlugin.at("version").text end if !version.nil? if version.include?"${" version = version.gsub("${","") version = version.gsub("}","") version = findPropVal(pom_document,version) end fullCordinate = "#{grpId}:#{artifactId}:#{version}" @@cordinateArr.push(fullCordinate) end end findParent(pom_document,"plugins") end def findPropVal(pom_document,proTag) propVal=nil pom_document.at("project/properties").children.each do |eachProp| if eachProp.name == proTag propVal = eachProp.text end end return propVal end def comparetheVersionWithParent(project_directory_path,cordinateArr,tag) pomPathArr = @@reactorHandler.fetchGidArtifactIdAndVersionFromChildModule(project_directory_path,false) reactorPomPath = "#{project_directory_path}/pom.xml" pomPathArr.push(reactorPomPath) pomPathArr.each do |eachPomPath| pom_document = @@reactorHandler.parse_xml_from_file(eachPomPath) pom_document.css(tag).each do |eachDependency| grpId=nil if (eachDependency.at("groupId").nil?) grpId="org.apache.maven.plugins" else grpId = eachDependency.at("groupId").text end artifactId = eachDependency.at("artifactId").text version=nil fullArtifactId=nil if ((!eachDependency.at("version").nil?) and (eachDependency.at("version").parent.name=="dependency")) version = eachDependency.at("version").text fullArtifactId = "#{grpId}:#{artifactId}:#{version}" end if (!fullArtifactId.nil? and cordinateArr.include?fullArtifactId and !tag.include?"dependencyManagement/" and eachDependency.parent.parent.name=="project") eachDependency.at("version").remove elsif (cordinateArr.include?fullArtifactId and eachDependency.at("exclusions").nil? and tag.include?"dependencyManagement/") eachDependency.remove end end @@mvnReactorization.write_nokogiri_to_xml(eachPomPath, pom_document) puts "Dm is done" end end def comparethePluginVersionWithParent(project_directory_path,cordinateArr,tag) pomPathArr = @@reactorHandler.fetchGidArtifactIdAndVersionFromChildModule(project_directory_path,false) pomPathArr.each do |eachPomPath| pom_document = @@reactorHandler.parse_xml_from_file(eachPomPath) pom_document.css(tag).each do |eachPlugin| grpId=nil if (eachPlugin.at("groupId").nil?) grpId="org.apache.maven.plugins" else grpId = eachPlugin.at("groupId").text end artifactId = eachPlugin.at("artifactId").text version=nil fullArtifactId=nil isParentGreater=false if ((!eachPlugin.at("version").nil?) and (eachPlugin.at("version").parent.name=="plugin")) version = eachPlugin.at("version").text if version.include?"${" version = version.gsub("${","") version = version.gsub("}","") version = findPropVal(pom_document,version) end fullArtifactId = "#{grpId}:#{artifactId}:#{version}" isParentGreater = findHigherVersionOfPlugin(fullArtifactId,cordinateArr) end if (!fullArtifactId.nil? and isParentGreater) eachPlugin.at("version").remove end end @@mvnReactorization.write_nokogiri_to_xml(eachPomPath, pom_document) puts "remove version of plugin is successfull" end end def comaprePluginVersionWihReactorPom(project_directory_path,cordinateArr,tag) pomPath = "#{project_directory_path}/pom.xml" pom_document = @@reactorHandler.parse_xml_from_file(pomPath) pom_document.css(tag).each do |eachPlugin| grpId=nil if (eachPlugin.at("groupId").nil?) grpId="org.apache.maven.plugins" else grpId = eachPlugin.at("groupId").text end artifactId = eachPlugin.at("artifactId").text version=nil fullArtifactId=nil isParentGreater=false if ((!eachPlugin.at("version").nil?) and (eachPlugin.at("version").parent.name=="plugin")) version = eachPlugin.at("version").text fullArtifactId = "#{grpId}:#{artifactId}:#{version}" isParentGreater = findHigherVersionOfPlugin(fullArtifactId,cordinateArr) end if (!fullArtifactId.nil? and isParentGreater) eachPlugin.remove end end pluginNode = pom_document.at("project/build/pluginManagement/plugins/plugin") buildNode = pom_document.at("project/build") if (pluginNode.nil? and !buildNode.nil?) buildNode.remove end @@mvnReactorization.write_nokogiri_to_xml(pomPath, pom_document) puts "remove version of plugin is successfull" end def findHigherVersionOfPlugin(fullArtifactId,cordinateArr) isParentGreater = false cordinateArrWithoutVersion = Hash.new cordinateArr.each do |eachCordinate| eachValArr = eachCordinate.split(":") grpId = eachValArr[0] artifactId = eachValArr[1] fullArtfactId = "#{grpId}:#{artifactId}" cordinateArrWithoutVersion[fullArtfactId] = eachValArr[2] end childCordinateArr = fullArtifactId.split(":") childCordinate = "#{childCordinateArr[0]}:#{childCordinateArr[1]}" childPluginVersion = childCordinateArr[2] if(!cordinateArrWithoutVersion[childCordinate].nil?) parentVersion = cordinateArrWithoutVersion[childCordinate] isParentGreater = compareVersion(childPluginVersion,parentVersion) end return isParentGreater end def compareVersion(childPluginVersion,parentVersion) if (!childPluginVersion.nil? and !parentVersion.nil? and parentVersion>=childPluginVersion) return true else return false end end end