Java查询依赖是否存在_手动通过Lucene判断该pom文件中jar是否存在,子依赖没判断...

这个Java程序利用Lucene搜索引擎库来检查指定的pom.xml文件中所包含的jar依赖是否存在。它首先解析pom文件获取依赖信息,然后通过Lucene创建索引,并搜索索引以确定jar文件是否存在于指定的Maven库路径中。
摘要由CSDN通过智能技术生成

packagelucne.test;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importorg.apache.lucene.analysis.standard.StandardAnalyzer;importorg.apache.lucene.document.Document;importorg.apache.lucene.document.StringField;importorg.apache.lucene.document.Field.Store;importorg.apache.lucene.index.DirectoryReader;importorg.apache.lucene.index.IndexReader;importorg.apache.lucene.index.IndexWriter;importorg.apache.lucene.index.IndexWriterConfig;importorg.apache.lucene.index.Term;importorg.apache.lucene.index.IndexWriterConfig.OpenMode;importorg.apache.lucene.queryparser.classic.ParseException;importorg.apache.lucene.queryparser.classic.QueryParser;importorg.apache.lucene.search.IndexSearcher;importorg.apache.lucene.search.Query;importorg.apache.lucene.search.ScoreDoc;importorg.apache.lucene.search.TermQuery;importorg.apache.lucene.search.TopDocs;importorg.apache.lucene.store.Directory;importorg.apache.lucene.store.FSDirectory;importorg.apache.lucene.util.Version;importorg.dom4j.DocumentException;importorg.dom4j.Element;importorg.dom4j.io.SAXReader;importorg.junit.Test;public classMavenPomUtil {//待索引文件路径

private staticString indexFilePath;//索引存储路径

public staticString dirpath;private static List files = new ArrayList();static{try{

indexFilePath="F:\\Repositorys\\MavenLib";

dirpath=new File("").getCanonicalPath()+"\\Index\\Directory";

}catch(IOException e) {

e.printStackTrace();

};

}

@Testpublic void search() throwsIOException{

Map errorMap=parserJarPomResult("F:\\workce\\eclispe\\newplaterom\\pom.xml");

System.out.println(errorMap);

}

@Testpublic voidinitCreateIndex(){

checkFile(newFile(indexFilePath));

createMavenLibIndex(files);

}/*** 返回结果

**/

public MapparserJarPomResult(String pompath){returnparserJarPomError(parserXmlFile(pompath));

}/*** 解析pom文件后,将结果集验证是否有误差

**/

private Map parserJarPomError(Listjars){

Map errorMap = new HashMap();if(jars!=null&&!jars.isEmpty()){for(String jarname:jars){boolean bo =searchMavenLibPathBoolean(jarname);if(!bo){

errorMap.put(jarname, bo);

}

}

}returnerrorMap;

}/*** 解析pom文件

**/@SuppressWarnings("unchecked")private ListparserXmlFile(String pomFilePath){

File pom= newFile(pomFilePath);

List jarList = new ArrayList();try{

SAXReader xmlreader= newSAXReader();

org.dom4j.Document doc=xmlreader.read(pom);

Element el=doc.getRootElement();

Element dependencies= el.element("dependencies");

Map propertiesMap = null;

Element properties= el.element("properties");if(properties!=null){

propertiesMap= new HashMap();

Iterator propertiesIt =properties.elementIterator();while(propertiesIt.hasNext()){

Element propertieChildren=propertiesIt.next();

String name=propertieChildren.getName();

String text=propertieChildren.getText();

propertiesMap.put("\\$\\{"+name+"\\}", text);

}

}

Iterator 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();

}returnjarList;

}/*** 查询索引是否存在

*@returnboolean

**/

public static booleansearchMavenLibPathBoolean(String jarFilenName){boolean flag=false;try{

Directory dir= FSDirectory.open(newFile(MavenPomUtil.dirpath));

IndexReader reader=DirectoryReader.open(dir);

IndexSearcher searcher= newIndexSearcher(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= newTermQuery(term);

TopDocs docs= searcher.search(query, 2);if(docs.totalHits>0){

flag=true;

}

reader.close();

}catch(IOException e) {

e.printStackTrace();

}returnflag;

}/*** 查询jar存在路径

*@returnMap

**/

public static Map>searchMavenLibPath(String jarFilenName){

Map> map = new HashMap>();

List pathlist = new ArrayList();try{

Directory dir= FSDirectory.open(newFile(MavenPomUtil.dirpath));

IndexReader reader=DirectoryReader.open(dir);

IndexSearcher searcher= newIndexSearcher(reader);

QueryParser parser= new QueryParser(Version.LUCENE_40, "filename", newStandardAnalyzer(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);returnmap;

}/*** 创建索引

**/

private void createMavenLibIndex(Listfiles){try{

Directory dir= FSDirectory.open(newFile(dirpath));

IndexWriterConfig config= new IndexWriterConfig(Version.LUCENE_40, newStandardAnalyzer(Version.LUCENE_40));

config.setOpenMode(OpenMode.CREATE);

IndexWriter writer= newIndexWriter(dir, config);for(File file:files){if(file.isFile()){

Document doc= newDocument();

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);

}

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值