Skip to content

Instantly share code, notes, and snippets.

@hsipeng
Created September 17, 2017 02:35
Show Gist options
  • Save hsipeng/8a01cbd49c401ddb58d3902d3bce436b to your computer and use it in GitHub Desktop.
Save hsipeng/8a01cbd49c401ddb58d3902d3bce436b to your computer and use it in GitHub Desktop.
lib下的jars包转换为pom.xml中的依赖工具类
package com.user.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.jar.JarInputStream;
import java.util.jar.Manifest;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.dom.DOMElement;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.jsoup.Jsoup;
import com.alibaba.fastjson.JSONObject;
public class MakePomFromJars {
public static void main(String[] args) throws FileNotFoundException, IOException {
List<String> notFundJars = new ArrayList<String>();
Element dependencys = new DOMElement("dependencies");
File dir = new File("D:/project/java/CSJ-Buttonz/WebContent/WEB-INF/lib");
System.out.println("-----------jars包转换maven pom.xml----------");
System.out.println("正在扫描libs:");
for (File jar : dir.listFiles()) {
JarInputStream jis = new JarInputStream(new FileInputStream(jar));
Manifest mainmanifest = jis.getManifest();
jis.close();
if (mainmanifest == null) {
System.err.println(jar.getName());
continue;
}
String bundleName = mainmanifest.getMainAttributes().getValue("Bundle-Name");
String bundleVersion = mainmanifest.getMainAttributes().getValue("Bundle-Version");
Element ele = null;
System.out.println(jar.getName());
StringBuffer sb = new StringBuffer(jar.getName());
if (bundleName != null) {
bundleName = bundleName.toLowerCase().replace(" ", "-");
sb.append(bundleName+"\t").append(bundleVersion);
ele = getDependices(bundleName, bundleVersion);
System.out.println(sb.toString());
System.out.println(ele.asXML());
}
if (ele == null || ele.elements().size() == 0) {
bundleName = "";
bundleVersion = "";
String[] ns = jar.getName().replace(".jar", "").split("-");
for (String s : ns) {
if (Character.isDigit(s.charAt(0))) {
bundleVersion += s + "-";
} else {
bundleName += s + "-";
}
}
if (bundleVersion.endsWith("-")) {
bundleVersion = bundleVersion.substring(0, bundleVersion.length() - 1);
}
if (bundleName.endsWith("-")) {
bundleName = bundleName.substring(0, bundleName.length() - 1);
}
ele = getDependices(bundleName, bundleVersion);
sb.setLength(0);
sb.append(bundleName+"\t").append(bundleVersion);
System.out.println(sb.toString());
System.out.println(ele.asXML());
}
ele = getDependices(bundleName, bundleVersion);
if (ele.elements().size() == 0) {
notFundJars.add(jar.getName());
}
dependencys.add(ele);
System.out.println();
}
System.out.println(dependencys.asXML());
System.out.println("扫描结束!");
System.out.println("---------------------------------------");
System.out.println("正在生成xml....");
Document doc = DocumentHelper.createDocument();
doc.addComment("生成于:"+new Date().getTime()+"by lirawx.");
doc.add(dependencys);
//用于格式化xml内容和设置头部标签
OutputFormat format = OutputFormat.createPrettyPrint();
//设置xml文档的编码为utf-8
format.setEncoding("utf-8");
Writer out;
try {
//创建一个输出流对象
out = new FileWriter(dir+"/pom.xml");
//创建一个dom4j创建xml的对象
XMLWriter writer = new XMLWriter(out, format);
//调用write方法将doc文档写到指定路径
writer.write(doc);
writer.close();
System.out.print("生成XML文件成功");
System.out.println("文件位于:"+dir+"/pom.xml");
System.out.println("---------------------------------------");
System.out.println("以下查找失败,请手动添加:");
for (String jarError : notFundJars) {
System.out.println(jarError);
}
System.out.println("---------------------------------------");
System.out.println("Bye!");
} catch (IOException e) {
System.out.print("生成XML文件失败");
e.printStackTrace();
}
}
public static Element getDependices(String key, String ver) {
Element dependency = new DOMElement("dependency");
// 设置代理
// System.setProperty("http.proxyHost", "127.0.0.1");
// System.setProperty("http.proxyPort", "8090");
try {
String url = "http://search.maven.org/solrsearch/select?q=a%3A%22" + key + "%22%20AND%20v%3A%22" + ver + "%22&rows=3&wt=json";
org.jsoup.nodes.Document doc = Jsoup.connect(url).ignoreContentType(true).timeout(30000).get();
String elem = doc.body().text();
JSONObject response = JSONObject.parseObject(elem).getJSONObject("response");
if (response.containsKey("docs") && response.getJSONArray("docs").size() > 0) {
JSONObject docJson = response.getJSONArray("docs").getJSONObject(0);
Element groupId = new DOMElement("groupId");
Element artifactId = new DOMElement("artifactId");
Element version = new DOMElement("version");
groupId.addText(docJson.getString("g"));
artifactId.addText(docJson.getString("a"));
version.addText(docJson.getString("v"));
dependency.add(groupId);
dependency.add(artifactId);
dependency.add(version);
}
} catch (Exception e) {
e.printStackTrace();
}
return dependency;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment