版权声明:本文为博主原创文章,未经博主允许不得转载。

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.apache.commons.io.IOUtils; import java.io.*;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map; /**
* 读取jar文件的sha1码,请求maven官方的solrsearch接口查询该jar文件所对应的maven坐标信息
* Created by Nihaorz on 2017/4/20.
*/
public class MakeMavenInfo { public static void main(String[] args) throws IOException, NoSuchAlgorithmException {
long start = System.currentTimeMillis();
File dir = new File("C:\\Users\\Administrator\\Desktop\\jars");
for (File jar : dir.listFiles()) {
String sha1 = getSha1ByFile(jar);
Map<String, String> map = getMavenInfoBySha1(jar, sha1);
System.out.println(map);
}
long end = System.currentTimeMillis();
System.out.println("耗时:" + (end-start)/1000 + "秒");
} /**
* 根据jar包输入流获取该文件的sha1码
* @param file
* @return
* @throws IOException
* @throws NoSuchAlgorithmException
*/
public static String getSha1ByFile(File file) throws IOException, NoSuchAlgorithmException {
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
FileInputStream fis = new FileInputStream(file);
byte[] data = new byte[1024];
int read;
while ((read = fis.read(data)) != -1) {
sha1.update(data, 0, read);
}
byte[] hashBytes = sha1.digest();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < hashBytes.length; i++) {
sb.append(Integer.toString((hashBytes[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
} /**
* 根据sha1码请求接口拿到该jar包对应的maven坐标信息
* @param jar
* @param sha1
* @return
*/
public static Map<String, String> getMavenInfoBySha1(File jar, String sha1){
Map<String, String> map = new HashMap<String, String>();
String url = "http://search.maven.org/solrsearch/select?q=1:\"";
StringBuilder sb = new StringBuilder();
sb.append(url).append(sha1).append("\"&rows=20&wt=json");
map.put("jarName", jar.getName());
try {
String jsonStr = IOUtils.toString(new URL(sb.toString()));
JsonObject json = new JsonParser().parse(jsonStr).getAsJsonObject();
JsonObject obj = json.getAsJsonObject("response").getAsJsonArray("docs").get(0).getAsJsonObject();
map.put("groupId", obj.get("g").getAsString());
map.put("artifactId", obj.get("a").getAsString());
map.put("version", obj.get("v").getAsString());
map.put("packaging", obj.get("p").getAsString());
map.put("result", "true");
} catch (Exception e) {
e.printStackTrace();
map.put("result", "false");
System.out.println(sb);
}
return map;
} }

参考:  http://www.sha1-online.com/sha1-java/

     http://search.maven.org/#api

读取jar文件的sha1码,请求maven官方的solrsearch接口查询该jar文件所对应的maven坐标信息的更多相关文章

  1. ivy由于sha1码不正确导致找不到模块(jar)的错误

    sbt设置jboss-interceptor-api-1.1作为依赖,但是找不到 [info] Resolving org.jboss.interceptor#jboss-interceptor-ap ...

  2. Eclipse开发环境debug模式调试断点从jar跳到源码

    Eclipse开发环境debug模式调试断点从jar跳到源码 说明:本案例使用jsch-0.1.54.jar和源码做test,项目分成两个,一个是jsch的源码,另一个是测试案例 一.下载JSch.的 ...

  3. 扫描某目录下的所有文件的MD5码并导出文件【可执行jar】

    pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:// ...

  4. 文件 MD5 SHA1 SHA256 SHA512 校验码生成工具 V1.3

    [程序介绍]免费开源的 文件 MD5 SHA1 SHA256 SHA512 校验码生成工具 V1.3 这是一个有意思的程序,同一个程序,即是图形程序,又是命令行程序.程序作用:输入一个文件的路径,输出 ...

  5. spark读取文件机制 源码剖析

    Spark数据分区调研 Spark以textFile方式读取文件源码 textFile方法位于 spark-core_2.11/org.apache.spark.api.java/JavaSparkC ...

  6. eclipse中导入jar文件的源码

    有时候想看看一个jar包的源码是怎么写的,想按Ctrl+鼠标左键点击来自动导航这时候就需要先把源码给导入到eclipse中,步骤如下:首先准备jar包和源文件包比如:

  7. HTML5 file api读取文件的MD5码工具

    1.工具的用途:用HTML5 file api读取文件的MD5码.MD5码在文件的唯一性识别上有很重要的应用,业内常用MD5进行文件识别.文件秒传.文件安全性检查等: 2.适用性:IE.Chrome皆 ...

  8. Eclipse里面的Maven项目如果下载依赖的jar包的源码

    Window---------Properties---------------Maven--------------勾选Download Artifact Sources和Download Arti ...

  9. Java文件操作源码大全

    Java文件操作源码大全 1.创建文件夹 52.创建文件 53.删除文件 54.删除文件夹 65.删除一个文件下夹所有的文件夹 76.清空文件夹 87.读取文件 88.写入文件 99.写入随机文件 9 ...

随机推荐

  1. JS 格式化时间(获取两个日期之间的每一天、每一月、每半小时、每一秒)

    时间戳转换为时间 // 时间戳转换为时间 function timestampToTime(timestamp, isMs = true) { const date = new Date(timest ...

  2. Python爬取豆瓣指定书籍的短评

    Python爬取豆瓣指定书籍的短评 #!/usr/bin/python # coding=utf-8 import re import sys import time import random im ...

  3. System.IO.Pipelines: .NET高性能IO

    System.IO.Pipelines是一个新的库,旨在简化在.NET中执行高性能IO的过程.它是一个依赖.NET Standard的库,适用于所有.NET实现. Pipelines诞生于.NET C ...

  4. 朱晔的互联网架构实践心得S1E5:不断耕耘的基础中间件

    朱晔的互联网架构实践心得S1E5:不断耕耘的基础中间件 [下载本文PDF进行阅读] 一般而言中间件和框架的区别是,中间件是独立运行的用于处理某项专门业务的CS程序,会有配套的客户端和服务端,框架虽然也 ...

  5. 第五章 动态SQL 批量操作

    用于实现动态SQL的元素主要有 if trim where set choose(when.otherwise) foreach MyBatis  缓存 一级缓存 在test类中 调用相同的方法 第二 ...

  6. 解决selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

    解决方案: 1.查看浏览器当前版本:chrome://version/. 2.到https://sites.google.com/a/chromium.org/chromedriver/downloa ...

  7. PAT L2-016 愿天下有情人都是失散多年的兄妹

    https://pintia.cn/problem-sets/994805046380707840/problems/994805061769609216 呵呵.大家都知道五服以内不得通婚,即两个人最 ...

  8. vue 开发依赖安装

    安装element-ui yarn add element-ui --save 使用element-ui main.js import Vue from 'vue'; import ElementUI ...

  9. SQL性能优化-order by语句的优化

    原文:http://bbs.landingbj.com/t-0-243203-1.html 在某些情况中,MySQL可以使用一个索引来满足ORDER BY子句,而不需要额外的排序.where条件和or ...

  10. Laravel自带SMTP邮件组件实现发送邮件(QQ、163、企业邮箱都可)

    Laravel自带SMTP邮件组件实现发送邮件(QQ.163.企业邮箱都可)     laravel自带SMTP邮件配置和遇到的坑 laravel自带SwiftMailer库,集成了多种邮件API,可 ...