Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

121 lignes
3.6KB

  1. #!/bin/bash
  2. baseurl="https://search.maven.org"
  3. response=""
  4. status=""
  5. downloaded=""
  6. get_url(){
  7. response=$(curl -s --write-out "%{http_code}\n" "$1")
  8. status=${response: -3}
  9. response=${response:0:-3}
  10. }
  11. count_char_occurrences(){
  12. string=$1
  13. stripped=${string//[^$2]}
  14. return ${#stripped}
  15. }
  16. handle_dep(){
  17. package=$1
  18. count_char_occurrences "$package" :
  19. numcolon=$?
  20. if [[ $numcolon -eq 1 ]]; then
  21. group=${package%%:*}
  22. artifact=${package##*:}
  23. version=""
  24. elif [[ $numcolon -eq 2 ]]; then
  25. group=${package%%:*}
  26. version=${package##*:}
  27. tmp=${package#*:}
  28. artifact=${tmp%%:*}
  29. else
  30. echo "$package: Invalid format. It should be 'groupID:artifactID' or 'groupID:artifactID:version'"
  31. return
  32. fi
  33. if [[ $version =~ '$' ]]; then
  34. echo "$package: This script does not have support for pom variables yet. Using latest version instead"
  35. version=""
  36. fi
  37. if [[ -z $version ]]; then
  38. echo "$package: Finding latest version"
  39. url="$baseurl/solrsearch/select?q=g:$group+AND+a:$artifact&rows=1&wt=json"
  40. get_url "$url"
  41. if [[ $status -ne 200 ]]; then
  42. echo "$package: Error $status from the Maven API. Please check that the package name is correct."
  43. return
  44. fi
  45. version=$(echo "$response" | sed "s/^.*\"latestVersion\":\"\([^\"]*\)\".*$/\1/")
  46. fi
  47. if [[ $downloaded =~ "$group:$artifact:$version" ]]; then
  48. echo "$package: Already downloaded"
  49. return
  50. fi
  51. echo "$package: Downloading pom for version $version"
  52. grouppath=${group//.//}
  53. urlpath="$grouppath/$artifact/$version/$artifact-$version.pom"
  54. url="$baseurl/remotecontent?filepath=$urlpath"
  55. get_url "$url"
  56. if [[ "$status" -ne 200 ]]; then
  57. echo "$package: Error $status from the Maven API. There's probably a bug in the code."
  58. return
  59. fi
  60. if [[ $response =~ "<packaging>pom</packaging>" ]]; then
  61. echo "$package: Handling as a BOM"
  62. pom=${response//<dependencyManagement>/}
  63. pom=${pom//<\/dependencyManagement>/}
  64. else
  65. stripped=$(echo $response | grep -Po "<dependencyManagement>\s*<dependencies>\K.*(?= </dependencies>\s</dependencyManagement>)")
  66. stripped=$(echo $stripped | sed "s/<!--.*-->//g")
  67. deps=$(echo $stripped | sed "s/<dependency>\s*<groupId>\([^<]*\)<\/groupId>\s*<artifactId>\([^<]*\)<\/artifactId>\s*<version>\([^<]*\)<\/version>.*<\/dependency>/\1:\2:\3/g")
  68. pom=$(cat << DOC
  69. <?xml version="1.0" encoding="UTF-8"?>
  70. <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
  71. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  72. <modelVersion>4.0.0</modelVersion>
  73. <groupId>tmp.$group</groupId>
  74. <artifactId>placeholder-$artifact</artifactId>
  75. <version>$version</version>
  76. <packaging>pom</packaging>
  77. <name>Package $artifact</name>
  78. <dependencies>
  79. <dependency>
  80. <groupId>$group</groupId>
  81. <artifactId>$artifact</artifactId>
  82. <version>$version</version>
  83. </dependency>
  84. </dependencies>
  85. </project>
  86. DOC
  87. )
  88. fi
  89. destdir="$(pwd)/poms/$group:$artifact:$version"
  90. mkdir -p "$destdir"
  91. echo "$pom" > "$destdir/pom.xml"
  92. downloaded="$downloaded $group:$artifact:$version"
  93. for dep in $deps; do
  94. echo "$package: Downloading transitive dependency $dep"
  95. handle_dep $dep
  96. done
  97. }
  98. while read line; do
  99. handle_dep $line
  100. done < "package-list.txt"
  101. sh generate_master_pom.sh