手动通过Lucene判断该pom文件中jar是否存在,子依赖没判断
package lucne.test; import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map; import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test; public class MavenPomUtil { //待索引文件路径
private static String indexFilePath;
//索引存储路径
public static String dirpath;
private static List<File> files = new ArrayList<File>(); static{
try {
indexFilePath="F:\\Repositorys\\MavenLib";
dirpath=new File("").getCanonicalPath()+"\\Index\\Directory";
} catch (IOException e) {
e.printStackTrace();
};
} @Test
public void search() throws IOException{
Map<String, Boolean> errorMap=parserJarPomResult("F:\\workce\\eclispe\\newplaterom\\pom.xml");
System.out.println(errorMap);
} @Test
public void initCreateIndex(){
checkFile(new File(indexFilePath));
createMavenLibIndex(files);
} /**
* 返回结果
* */
public Map<String, Boolean> parserJarPomResult(String pompath){
return parserJarPomError(parserXmlFile(pompath));
} /**
* 解析pom文件后,将结果集验证是否有误差
* */
private Map<String, Boolean> parserJarPomError(List<String> jars){
Map<String, Boolean> errorMap = new HashMap<String, Boolean>();
if(jars!=null&&!jars.isEmpty()){
for(String jarname:jars){
boolean bo = searchMavenLibPathBoolean(jarname);
if(!bo){
errorMap.put(jarname, bo);
}
}
}
return errorMap;
} /**
* 解析pom文件
* */
@SuppressWarnings("unchecked")
private List<String> parserXmlFile(String pomFilePath){
File pom = new File(pomFilePath);
List<String> jarList = new ArrayList<String>();
try {
SAXReader xmlreader = new SAXReader();
org.dom4j.Document doc = xmlreader.read(pom);
Element el = doc.getRootElement();
Element dependencies = el.element("dependencies");
Map<String, String> propertiesMap = null;
Element properties = el.element("properties");
if(properties!=null){
propertiesMap = new HashMap<String, String>();
Iterator<Element> propertiesIt = properties.elementIterator();
while(propertiesIt.hasNext()){
Element propertieChildren = propertiesIt.next();
String name = propertieChildren.getName();
String text = propertieChildren.getText();
propertiesMap.put("\\$\\{"+name+"\\}", text);
}
}
Iterator<Element> dependenciesIt = dependencies.elementIterator();
while(dependenciesIt.hasNext()){
Element dependency=dependenciesIt.next();
Element artifactId=dependency.element("artifactId");
Element version=dependency.element("version");
Element scope=dependency.element("scope");
Element classifier=dependency.element("classifier");
String artifactIdValue = artifactId.getText();
String versionValue = version.getText();
String jarFileName="";
if(scope==null||!scope.getText().equals("system")){
jarFileName=artifactIdValue.concat("-").concat(versionValue);
if(classifier!=null){
String classifiervalue=classifier.getText();
jarFileName=jarFileName.concat("-").concat(classifiervalue);
}
jarFileName=jarFileName.concat(".jar");
}else if(scope.getText().equals("system")){
Element systemPath=dependency.element("systemPath");
String systemPathValue=systemPath.getText();
int lastindex=systemPathValue.lastIndexOf("/");
jarFileName=systemPathValue.substring(lastindex+1, systemPathValue.length());
}
if(propertiesMap!=null){
for(String key:propertiesMap.keySet()){
jarFileName=jarFileName.replaceAll(key, propertiesMap.get(key));
}
}
jarList.add(jarFileName);
}
} catch (DocumentException e) {
e.printStackTrace();
}
return jarList;
} /**
* 查询索引是否存在
* @return boolean
* */
public static boolean searchMavenLibPathBoolean(String jarFilenName){
boolean flag=false;
try {
Directory dir = FSDirectory.open(new File(MavenPomUtil.dirpath));
IndexReader reader = DirectoryReader.open(dir);
IndexSearcher searcher = new IndexSearcher(reader);
/* QueryParser parser = new QueryParser(Version.LUCENE_40, "filename", new StandardAnalyzer(Version.LUCENE_40));
Query query = parser.parse(jarFilenName);*/
Term term = new Term("filename",jarFilenName);
TermQuery query = new TermQuery(term);
TopDocs docs = searcher.search(query, 2);
if(docs.totalHits>0){
flag=true;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
return flag;
} /**
* 查询jar存在路径
* @return Map
* */
public static Map<String, List<String>> searchMavenLibPath(String jarFilenName){
Map<String, List<String>> map = new HashMap<String, List<String>>();
List<String> pathlist = new ArrayList<String>();
try {
Directory dir = FSDirectory.open(new File(MavenPomUtil.dirpath));
IndexReader reader = DirectoryReader.open(dir);
IndexSearcher searcher = new IndexSearcher(reader);
QueryParser parser = new QueryParser(Version.LUCENE_40, "filename", new StandardAnalyzer(Version.LUCENE_40));
Query query = parser.parse(jarFilenName);
TopDocs docs = searcher.search(query, 2);
for(ScoreDoc scoredoc:docs.scoreDocs){
Document doc = searcher.doc(scoredoc.doc);
String filepath = doc.get("filepath");
pathlist.add(filepath);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
map.put(jarFilenName, pathlist);
return map;
} /**
* 创建索引
* */
private void createMavenLibIndex(List<File> files){
try {
Directory dir = FSDirectory.open(new File(dirpath));
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_40, new StandardAnalyzer(Version.LUCENE_40));
config.setOpenMode(OpenMode.CREATE);
IndexWriter writer = new IndexWriter(dir, config);
for(File file:files){
if(file.isFile()){
Document doc = new Document();
doc.add(new StringField("filename", file.getName(), Store.YES));
doc.add(new StringField("filepath",file.getPath(),Store.YES));
writer.addDocument(doc);
}
}
writer.forceMerge(1);//优化压缩段,大规模添加数据的时候建议,少使用本方法,会影响性能
writer.commit();//提交数据
writer.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 查询待索引文件
* */
private void checkFile(File checkFile){// 查看目录下的所有文件
if (checkFile.exists()) {
if (checkFile.isDirectory()) {
File[] f = checkFile.listFiles();// 查看目录的文件
for (int i = 0; i < f.length; i++) {
checkFile(f[i]);
}
} else {
String fileName=checkFile.getName();
if(fileName.endsWith(".jar")){
files.add(checkFile);
}
}
}
} }
手动通过Lucene判断该pom文件中jar是否存在,子依赖没判断的更多相关文章
- 如何处理pom文件中没有找到HUB检查到高危漏洞的依赖包
最近使用HUB工具检查到maven工程中存在高危险漏洞,虽然定位到具体的引用包了,但是在pom文件中却没有发现该依赖包.此时,我们就需要用到这条命令mvn dependency:tree,该命令会将m ...
- idea中的pom文件中的jar包下载不了,手动下载jar包的方法
问题描述: 在pom文件中添加依赖的时候,程序怎么着都是下载不了,而且实验了各种方式: IDEA引MAVEN项目jar包依赖导入问题解决 https://www.cnblogs.com/a845701 ...
- Maven项目中在properties 中使用 ${} 来引用pom文件中的属性
比如在pom文件中定义了属性如下: <jdbc.host.global>127.0.0.1</jdbc.host.global> <jdbc.databasename.g ...
- 【IDEA】Maven踩坑:pom文件中的默认profiles不生效+IDEA中Maven的profiles使用说明
一.问题即分析 项目pom文件中的profiles有3个配置:dev.test和production 默认配置的是dev,如下图: 但在本地起服务时,读取的配置始终是test里的. 二.原因 2.1 ...
- Maven pom文件中dependency scope用法
在Maven中依赖的域有:compile.provided.runtime.system.test.import 一.compile(默认) 当依赖的scope为compile的时候,那么当前这个依赖 ...
- maven在pom文件中引入了icepdf-core包,pom文件却莫名的报错,说jai_core包missing
maven在pom文件中引入了icepdf-core包,却莫名的报错,说jai_core包missing,把这个jai_core包引入之后还是一样报错,PS:icepdf-core使用的时候不用引用j ...
- maven项目,导入的jar包,没有包含在pom文件中,install失败
[INFO] BUILD FAILURE[INFO] ------------------------------------------------------------------------[ ...
- 关于使用命令添加jar进自己的pom文件中-maven项目添加jar包
现在几乎开发项目都是使用的maven项目,但是有的时候可以使用比较偏门或者新的jar可能在网上搜不到在pom文件里的配置应该如何写,因此写下这篇博客. 比如我现在想加入的AAA.jar这个包 打开cm ...
- maven在pom文件中添加你想要的jar包
概述:POM 文件里面的依赖jar包经常需要添加, 仅需要在google中代码查找 :maven 你需的jar包名称 repository 用了Maven,所需的JAR包就不能再像往常一样,自己找到并 ...
随机推荐
- Linux概念架构的理解
摘要 Linux kernel成功的两个原因:(1)架构设计支持大量的志愿开发者加入到开发过程中:(2)每个子系统,尤其是那些需要改进的,都支持很好的扩展性.正式这两个原因使得Linux kernel ...
- 关于JAVA中URL传递中文参数的问题
今天在调用一个接口时,需要传递一个中文参数,结果获取不到数据,原因就在于中文传参的编码问题. 问题来源:URL url= new URL("http://XXX?OrganName=司法厅& ...
- Asp.net Mvc 自定义Session (二)
在 Asp.net Mvc 自定义Session (一)中我们把数据缓存工具类写好了,今天在我们在这篇把 剩下的自定义Session写完 首先还请大家跟着我的思路一步步的来实现,既然我们要自定义Ses ...
- iOS 极光推送
1.关于推送的几个证书.http://www.mobile-open.com/2016/931624.html 进入开发者中心:https://developer.apple.com/account/ ...
- IOS 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: URLString'
转载自:http://i.cnblogs.com/EditPosts.aspx?postid=4012011 今天想写一个请求的天气,好的,废话不多说,先贴代码: 使用AFNetWorking 发送g ...
- HDU5100Chessboard(数论)
HDU5100Chessboard(数论) 题目链接 题目大意:用k∗1的瓷砖区铺n∗n的矩形,问能铺上的最大的面积. 解题思路:这题没有直接得出结论:l = n%k, ans = max[(n^2 ...
- Java开源内容管理CMS系统J4CMS支持静态化直接ftp上传到你的空间了
页面可直接编辑的cms系统j4cms能够直接支持使用ftp 输出 html到你的空间了 真正的静态化 这是静态化后的站点 http://www.j4cms.com/ 源代码上传至csdn了,能够下载源 ...
- 进程控制之vfork函数
vfork函数的调用序列和返回值与fork相同,但两者的语义不同. vfork用于创建一个新进程,而新进程的目的是exec一个新程序.vfork和fork一样都创建一个子进程,但是它并不将父进程的地址 ...
- 【转】最新基于adt-bundle-windows-x86的android开发环境搭建
http://blog.csdn.net/wangqiuyun/article/details/8731240 某系统要配套做一个android客户端,来一次android开发环境快速搭建,系统Win ...
- TCPDUMP Command Examples
tcpdump command is also called as packet analyzer. tcpdump command will work on most flavors of unix ...