根据jar生成pom

蔚落 2024-04-07 15:59 125阅读 0赞

看了网上不少根据lib下的jar自动生成pom.xml中的依赖的文章,发现其实并不理想, 基本上就是获取jar中的信息替你去查询下网上,解析返回值,把可能的groupId,version等信息拼接一下。还是需要人工识别修改下,不过总比从头开始方便一点。下面具体解析一个例子:

人工根据jar相关信息去maven仓库查询,分析网络交互方式
https://search.maven.org/solrsearch/select?q=g:junit%20AND%20v:4.11&start=0&rows=3
在这里插入图片描述
在这里插入图片描述
代码模拟人工查询并拼接依赖xml

  1. import com.alibaba.fastjson.JSONObject;
  2. import org.dom4j.Element;
  3. import org.dom4j.dom.DOMElement;
  4. import org.jsoup.Jsoup;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.io.FileNotFoundException;
  8. import java.io.IOException;
  9. import java.util.jar.JarInputStream;
  10. import java.util.jar.Manifest;
  11. public class MakePomFromJars {
  12. public static void main(String[] args) throws FileNotFoundException, IOException {
  13. Element dependencys = new DOMElement("dependencys");
  14. File dir = new File("D:\\IdeaProjects\\SQLParse-master\\lib");
  15. for (File jar : dir.listFiles()) {
  16. JarInputStream jis = new JarInputStream(new FileInputStream(jar));
  17. Manifest mainmanifest = jis.getManifest();
  18. jis.close();
  19. if (mainmanifest == null) {
  20. //System.err.println(jar.getName());
  21. continue;
  22. }
  23. String bundleName = mainmanifest.getMainAttributes().getValue("Bundle-Name");
  24. String bundleVersion = mainmanifest.getMainAttributes().getValue("Bundle-Version");
  25. Element ele = null;
  26. //System.out.println(jar.getName());
  27. StringBuffer sb = new StringBuffer(jar.getName());
  28. if (bundleName != null) {
  29. bundleName = bundleName.toLowerCase().replace(" ", "-");
  30. sb.append(bundleName+"\t").append(bundleVersion);
  31. ele = getDependices(bundleName, bundleVersion);
  32. //System.out.println(sb.toString());
  33. System.out.println(ele.asXML());
  34. }
  35. if (ele == null || ele.elements().size() == 0) {
  36. bundleName = "";
  37. bundleVersion = "";
  38. String[] ns = jar.getName().replace(".jar", "").split("-");
  39. for (String s : ns) {
  40. if (Character.isDigit(s.charAt(0))) {
  41. bundleVersion += s + "-";
  42. } else {
  43. bundleName += s + "-";
  44. }
  45. }
  46. if (bundleVersion.endsWith("-")) {
  47. bundleVersion = bundleVersion.substring(0, bundleVersion.length() - 1);
  48. }
  49. if (bundleName.endsWith("-")) {
  50. bundleName = bundleName.substring(0, bundleName.length() - 1);
  51. }
  52. ele = getDependices(bundleName, bundleVersion);
  53. sb.setLength(0);
  54. sb.append(bundleName+"\t").append(bundleVersion);
  55. //System.out.println(sb.toString());
  56. System.out.println(ele.asXML());
  57. }
  58. ele = getDependices(bundleName, bundleVersion);
  59. if (ele.elements().size() == 0) {
  60. ele.add(new DOMElement("groupId").addText("not find"));
  61. ele.add(new DOMElement("artifactId").addText(bundleName));
  62. ele.add(new DOMElement("version").addText(bundleVersion));
  63. }
  64. dependencys.add(ele);
  65. System.out.println();
  66. }
  67. System.out.println(dependencys.asXML());
  68. }
  69. public static Element getDependices(String key, String ver) {
  70. Element dependency = new DOMElement("dependency");
  71. // System.setProperty("http.proxyHost", "127.0.0.1");
  72. // System.setProperty("http.proxyPort", "8090");
  73. try {
  74. // https://search.maven.org/solrsearch/select?q=g:junit%20AND%20v:4.11&start=0&rows=3
  75. //String url = "http://search.maven.org/solrsearch/select?q=a%3A%22" + key + "%22%20AND%20v%3A%22" + ver + "%22&rows=3&wt=json";
  76. //https://search.maven.org/solrsearch/select?q=apache-log4j-extras&v=1.2.17
  77. String url = "http://search.maven.org/solrsearch/select?q=" + key + "&v=" + ver + "&rows=3&wt=json";
  78. org.jsoup.nodes.Document doc = Jsoup.connect(url).ignoreContentType(true).timeout(30000).get();
  79. String elem = doc.body().text();
  80. // System.out.println(elem);
  81. JSONObject response = JSONObject.parseObject(elem).getJSONObject("response");
  82. if (response.containsKey("docs") && response.getJSONArray("docs").size() > 0) {
  83. JSONObject docJson = response.getJSONArray("docs").getJSONObject(0);
  84. Element groupId = new DOMElement("groupId");
  85. Element artifactId = new DOMElement("artifactId");
  86. Element version = new DOMElement("version");
  87. Element latestVersion = new DOMElement("latestVersion");
  88. groupId.addText(docJson.getString("g"));
  89. artifactId.addText(docJson.getString("a"));
  90. version.addText(ver);
  91. latestVersion.addText(docJson.getString("latestVersion"));
  92. dependency.add(groupId);
  93. dependency.add(artifactId);
  94. dependency.add(version);
  95. //dependency.add(latestVersion);
  96. }
  97. //查找不到jar
  98. else {
  99. Element groupId = new DOMElement("groupId");
  100. Element artifactId = new DOMElement("artifactId");
  101. Element version = new DOMElement("version");
  102. groupId.addText("com.aj.external");
  103. artifactId.addText(key);
  104. version.addText("1.0.0" );
  105. dependency.add(groupId);
  106. dependency.add(artifactId);
  107. dependency.add(version);
  108. }
  109. } catch (Exception e) {
  110. e.printStackTrace();
  111. }
  112. return dependency;
  113. }
  114. }

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>org.example</groupId>
  7. <artifactId>createPom</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <properties>
  10. <maven.compiler.source>11</maven.compiler.source>
  11. <maven.compiler.target>11</maven.compiler.target>
  12. </properties>
  13. <dependencies>
  14. <dependency>
  15. <groupId>dom4j</groupId>
  16. <artifactId>dom4j</artifactId>
  17. <version>1.1</version>
  18. </dependency>
  19. <dependency>
  20. <groupId>org.jsoup</groupId>
  21. <artifactId>jsoup</artifactId>
  22. <version>1.10.2</version>
  23. </dependency>
  24. <dependency>
  25. <groupId>com.alibaba</groupId>
  26. <artifactId>fastjson</artifactId>
  27. <version>1.2.80</version>
  28. </dependency>
  29. </dependencies>
  30. </project>

发表评论

表情:
评论列表 (有 0 条评论,125人围观)

还没有评论,来说两句吧...

相关阅读

    相关 根据jar生成pom

    看了网上不少根据lib下的jar自动生成pom.xml中的依赖的文章,发现其实并不理想, 基本上就是获取jar中的信息替你去查询下[网上][Link 1],解析返回值,把可能的

    相关 maven pomjar、war区别

    maven中的三种工程: 1.pom工程:用在父级工程或聚合工程中。用来做jar包的版本控制。 2.war工程:将会打包成war,发布在服务器上的工程。如网站或服务。 3

    相关 jar包与对应pom文件

    问题: 本地maven仓放入私有jar包后在idea中pom文件进行依赖引入,可是依赖一直飘红,即无法引入。 ![在这里插入图片描述][201906291518014