From b99caf3246bde1237b5e645ab0b972fe3f5dbdba Mon Sep 17 00:00:00 2001 From: Mat Booth Date: Tue, 18 Jun 2019 15:45:18 +0100 Subject: [PATCH 2/6] Port to latest versions of maven-indexer and lucene --- .../org.eclipse.m2e.maven.indexer/pom.xml | 4 +- .../maven/index/DefaultIndexerEngine.java | 27 ++--- .../core/ui/internal/util/ProposalUtil.java | 2 +- .../nexus/AetherClientResourceFetcher.java | 11 +- .../core/internal/index/nexus/NexusIndex.java | 10 +- .../index/nexus/NexusIndexManager.java | 100 +++++++++--------- 6 files changed, 83 insertions(+), 71 deletions(-) diff --git a/m2e-maven-runtime/org.eclipse.m2e.maven.indexer/pom.xml b/m2e-maven-runtime/org.eclipse.m2e.maven.indexer/pom.xml index c31e90b..5213090 100644 --- a/m2e-maven-runtime/org.eclipse.m2e.maven.indexer/pom.xml +++ b/m2e-maven-runtime/org.eclipse.m2e.maven.indexer/pom.xml @@ -27,7 +27,7 @@ org.apache.maven.indexer indexer-core - 3.1.0 + 6.0.0 true @@ -70,7 +70,7 @@ - !* + org.apache.lucene*,!* org.eclipse.m2e.maven.runtime;bundle-version="[1.16.0,1.17.0)", diff --git a/m2e-maven-runtime/org.eclipse.m2e.maven.indexer/src/main/java/org/apache/maven/index/DefaultIndexerEngine.java b/m2e-maven-runtime/org.eclipse.m2e.maven.indexer/src/main/java/org/apache/maven/index/DefaultIndexerEngine.java index 4b155c1..6aa1359 100644 --- a/m2e-maven-runtime/org.eclipse.m2e.maven.indexer/src/main/java/org/apache/maven/index/DefaultIndexerEngine.java +++ b/m2e-maven-runtime/org.eclipse.m2e.maven.indexer/src/main/java/org/apache/maven/index/DefaultIndexerEngine.java @@ -25,7 +25,9 @@ import java.util.Set; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; -import org.apache.lucene.document.Fieldable; +import org.apache.lucene.document.StringField; +import org.apache.lucene.index.IndexableField; +import org.apache.lucene.index.IndexableFieldType; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.Term; import org.apache.lucene.search.IndexSearcher; @@ -112,10 +114,9 @@ public class DefaultIndexerEngine { final HashMap result = new HashMap(); - for ( Object o : d.getFields() ) + for ( IndexableField f : d.getFields() ) { - Fieldable f = (Fieldable) o; - if ( f.isStored() ) + if ( f.fieldType().stored() ) { result.put( f.name(), f.stringValue() ); } @@ -128,13 +129,15 @@ public class DefaultIndexerEngine { try { - IndexSearcher indexSearcher = context.getIndexSearcher(); + IndexSearcher indexSearcher = context.acquireIndexSearcher(); TopDocs result = indexSearcher.search( new TermQuery( new Term( ArtifactInfo.UINFO, ac.getArtifactInfo().getUinfo() ) ), 2 ); - if ( result.totalHits == 1 ) + if ( result.totalHits.value == 1 ) { - return indexSearcher.doc( result.scoreDocs[0].doc ); + Document doc = indexSearcher.doc( result.scoreDocs[0].doc ); + context.releaseIndexSearcher( indexSearcher ); + return doc; } } catch ( IOException e ) @@ -155,9 +158,9 @@ public class DefaultIndexerEngine } Set allGroups = context.getAllGroups(); - if ( !allGroups.contains( ac.getArtifactInfo().groupId ) ) + if ( !allGroups.contains( ac.getArtifactInfo().getGroupId() ) ) { - allGroups.add( ac.getArtifactInfo().groupId ); + allGroups.add( ac.getArtifactInfo().getGroupId() ); context.setAllGroups( allGroups ); } } @@ -170,9 +173,9 @@ public class DefaultIndexerEngine String uinfo = ac.getArtifactInfo().getUinfo(); // add artifact deletion marker Document doc = new Document(); - doc.add( new Field( ArtifactInfo.DELETED, uinfo, Field.Store.YES, Field.Index.NO ) ); - doc.add( new Field( ArtifactInfo.LAST_MODIFIED, // - Long.toString( System.currentTimeMillis() ), Field.Store.YES, Field.Index.NO ) ); + doc.add( new StringField( ArtifactInfo.DELETED, uinfo, Field.Store.YES ) ); + doc.add( new StringField( ArtifactInfo.LAST_MODIFIED, // + Long.toString( System.currentTimeMillis() ), Field.Store.YES ) ); IndexWriter w = context.getIndexWriter(); w.addDocument( doc ); w.deleteDocuments( new Term( ArtifactInfo.UINFO, uinfo ) ); diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/util/ProposalUtil.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/util/ProposalUtil.java index 1446936..40f851e 100644 --- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/util/ProposalUtil.java +++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/util/ProposalUtil.java @@ -34,7 +34,7 @@ import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchCommandConstants; import org.eclipse.ui.fieldassist.ContentAssistCommandAdapter; -import org.apache.lucene.queryParser.QueryParser; +import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.maven.project.MavenProject; diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/AetherClientResourceFetcher.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/AetherClientResourceFetcher.java index c549248..b311824 100644 --- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/AetherClientResourceFetcher.java +++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/AetherClientResourceFetcher.java @@ -35,7 +35,7 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; -import org.apache.maven.index.updater.AbstractResourceFetcher; +import org.apache.maven.index.updater.ResourceFetcher; import org.apache.maven.wagon.authentication.AuthenticationInfo; import org.apache.maven.wagon.proxy.ProxyInfo; import org.apache.maven.wagon.proxy.ProxyUtils; @@ -51,7 +51,7 @@ import io.takari.aether.client.Response; import io.takari.aether.okhttp.OkHttpAetherClient; -public class AetherClientResourceFetcher extends AbstractResourceFetcher { +public class AetherClientResourceFetcher implements ResourceFetcher { private AetherClient aetherClient; @@ -101,6 +101,13 @@ public class AetherClientResourceFetcher extends AbstractResourceFetcher { } } + public InputStream retrieve(String name) throws IOException, FileNotFoundException { + String url = baseUrl + "/" + name; + Response response = aetherClient.get(url); + + return response.getInputStream(); + } + class AetherClientConfigAdapter extends AetherClientConfig { private final Logger log = LoggerFactory.getLogger(AetherClientConfigAdapter.class); diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/NexusIndex.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/NexusIndex.java index 0902eda..45b053d 100644 --- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/NexusIndex.java +++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/NexusIndex.java @@ -107,7 +107,7 @@ public class NexusIndex implements IIndex, IMutableIndex { public Collection find(Collection groupId, Collection artifactId, Collection version, Collection packaging) throws CoreException { - BooleanQuery query = new BooleanQuery(); + BooleanQuery.Builder query = new BooleanQuery.Builder(); addQueryFromSearchExpressionCollection(query, MAVEN.PACKAGING, packaging); @@ -117,18 +117,18 @@ public class NexusIndex implements IIndex, IMutableIndex { addQueryFromSearchExpressionCollection(query, MAVEN.VERSION, version); - return indexManager.search(repository, query).values(); + return indexManager.search(repository, query.build()).values(); } - private void addQueryFromSearchExpressionCollection(final BooleanQuery query, final Field field, + private void addQueryFromSearchExpressionCollection(final BooleanQuery.Builder query, final Field field, final Collection sec) { if(sec != null && !sec.isEmpty()) { if(sec.size() > 1) { - BooleanQuery q = new BooleanQuery(); + BooleanQuery.Builder q = new BooleanQuery.Builder(); for(SearchExpression se : sec) { q.add(indexManager.constructQuery(field, se), Occur.SHOULD); } - query.add(q, Occur.MUST); + query.add(q.build(), Occur.MUST); } else { query.add(indexManager.constructQuery(field, sec.iterator().next()), Occur.MUST); } diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/NexusIndexManager.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/NexusIndexManager.java index 37d6906..e7e0688 100644 --- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/NexusIndexManager.java +++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/NexusIndexManager.java @@ -54,9 +54,7 @@ import org.codehaus.plexus.util.IOUtil; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanClause.Occur; import org.apache.lucene.search.BooleanQuery; -import org.apache.lucene.search.FilteredQuery; import org.apache.lucene.search.Query; -import org.apache.lucene.search.QueryWrapperFilter; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; @@ -71,7 +69,6 @@ import org.apache.maven.index.MAVEN; import org.apache.maven.index.NexusIndexer; import org.apache.maven.index.SearchType; import org.apache.maven.index.artifact.Gav; -import org.apache.maven.index.artifact.IllegalArtifactCoordinateException; import org.apache.maven.index.context.IndexCreator; import org.apache.maven.index.context.IndexingContext; import org.apache.maven.index.creator.JarFileContentsIndexCreator; @@ -231,7 +228,7 @@ public class NexusIndexManager implements IndexManager, IMavenProjectChangedList public IndexedArtifactFile getIndexedArtifactFile(IRepository repository, ArtifactKey gav) throws CoreException { try { - BooleanQuery query = new BooleanQuery(); + BooleanQuery.Builder query = new BooleanQuery.Builder(); query.add(constructQuery(MAVEN.GROUP_ID, gav.getGroupId(), SearchType.EXACT), BooleanClause.Occur.MUST); query.add(constructQuery(MAVEN.ARTIFACT_ID, gav.getArtifactId(), SearchType.EXACT), BooleanClause.Occur.MUST); query.add(constructQuery(MAVEN.VERSION, gav.getVersion(), SearchType.EXACT), BooleanClause.Occur.MUST); @@ -241,9 +238,10 @@ public class NexusIndexManager implements IndexManager, IMavenProjectChangedList } synchronized(getIndexLock(repository)) { - ArtifactInfo artifactInfo = getIndexer().identify(query, Collections.singleton(getIndexingContext(repository))); - if(artifactInfo != null) { - return getIndexedArtifactFile(artifactInfo); + Collection artifactInfo = getIndexer().identify(query.build(), + Collections.singleton(getIndexingContext(repository))); + if(artifactInfo != null && !artifactInfo.isEmpty()) { + return getIndexedArtifactFile((ArtifactInfo) artifactInfo.toArray()[0]); } } } catch(Exception ex) { @@ -257,26 +255,26 @@ public class NexusIndexManager implements IndexManager, IMavenProjectChangedList /** for Unit test */ public IndexedArtifactFile getIndexedArtifactFile(ArtifactInfo artifactInfo) { - String groupId = artifactInfo.groupId; - String artifactId = artifactInfo.artifactId; - String repository = artifactInfo.repository; - String version = artifactInfo.version; - String classifier = artifactInfo.classifier; - String packaging = artifactInfo.packaging; - String fname = artifactInfo.fname; + String groupId = artifactInfo.getGroupId(); + String artifactId = artifactInfo.getArtifactId(); + String repository = artifactInfo.getRepository(); + String version = artifactInfo.getVersion(); + String classifier = artifactInfo.getClassifier(); + String packaging = artifactInfo.getPackaging(); + String fname = artifactInfo.getFileName(); if(fname == null) { fname = artifactId + '-' + version + (classifier != null ? '-' + classifier : "") + (packaging != null ? ('.' + packaging) : ""); //$NON-NLS-1$ //$NON-NLS-2$ } - long size = artifactInfo.size; - Date date = new Date(artifactInfo.lastModified); + long size = artifactInfo.getSize(); + Date date = new Date(artifactInfo.getLastModified()); - int sourcesExists = artifactInfo.sourcesExists.ordinal(); - int javadocExists = artifactInfo.javadocExists.ordinal(); + int sourcesExists = artifactInfo.getSourcesExists().ordinal(); + int javadocExists = artifactInfo.getJavadocExists().ordinal(); - String prefix = artifactInfo.prefix; - List goals = artifactInfo.goals; + String prefix = artifactInfo.getPrefix(); + List goals = artifactInfo.getGoals(); return new IndexedArtifactFile(repository, groupId, artifactId, version, packaging, classifier, fname, size, date, sourcesExists, javadocExists, prefix, goals); @@ -284,8 +282,9 @@ public class NexusIndexManager implements IndexManager, IMavenProjectChangedList public IndexedArtifactFile identify(File file) throws CoreException { try { - ArtifactInfo artifactInfo = getIndexer().identify(file); - return artifactInfo == null ? null : getIndexedArtifactFile(artifactInfo); + Collection artifactInfo = getIndexer().identify(file); + return artifactInfo == null || artifactInfo.isEmpty() ? null + : getIndexedArtifactFile((ArtifactInfo) artifactInfo.toArray()[0]); } catch(IOException ex) { throw new CoreException(new Status(IStatus.ERROR, IMavenConstants.PLUGIN_ID, -1, Messages.NexusIndexManager_error_search, ex)); @@ -343,7 +342,7 @@ public class NexusIndexManager implements IndexManager, IMavenProjectChangedList return search(null, term, type, classifier); } - private void addClassifiersToQuery(BooleanQuery bq, int classifier) { + private void addClassifiersToQuery(BooleanQuery.Builder bq, int classifier) { boolean includeJavaDocs = (classifier & IIndex.SEARCH_JAVADOCS) > 0; Query tq = null; if(!includeJavaDocs) { @@ -374,46 +373,55 @@ public class NexusIndexManager implements IndexManager, IMavenProjectChangedList // query = new TermQuery(new Term(ArtifactInfo.GROUP_ID, term)); // query = new PrefixQuery(new Term(ArtifactInfo.GROUP_ID, term)); } else if(IIndex.SEARCH_ARTIFACT.equals(type)) { - BooleanQuery bq = new BooleanQuery(); + BooleanQuery.Builder bq = new BooleanQuery.Builder(); bq.add(constructQuery(MAVEN.GROUP_ID, term), Occur.SHOULD); //$NON-NLS-1$ bq.add(constructQuery(MAVEN.ARTIFACT_ID, term), Occur.SHOULD); //$NON-NLS-1$ bq.add( constructQuery(MAVEN.SHA1, term.getStringValue(), term.getStringValue().length() == 40 ? SearchType.EXACT : SearchType.SCORED), Occur.SHOULD); addClassifiersToQuery(bq, classifier); - query = bq; + query = bq.build(); } else if(IIndex.SEARCH_PARENTS.equals(type)) { if(term == null) { query = constructQuery(MAVEN.PACKAGING, "pom", SearchType.EXACT); //$NON-NLS-1$ } else { - BooleanQuery bq = new BooleanQuery(); + BooleanQuery.Builder bq = new BooleanQuery.Builder(); bq.add(constructQuery(MAVEN.GROUP_ID, term), Occur.SHOULD); //$NON-NLS-1$ bq.add(constructQuery(MAVEN.ARTIFACT_ID, term), Occur.SHOULD); //$NON-NLS-1$ bq.add( constructQuery(MAVEN.SHA1, term.getStringValue(), term.getStringValue().length() == 40 ? SearchType.EXACT : SearchType.SCORED), Occur.SHOULD); Query tq = constructQuery(MAVEN.PACKAGING, "pom", SearchType.EXACT); //$NON-NLS-1$ - query = new FilteredQuery(tq, new QueryWrapperFilter(bq)); + BooleanQuery.Builder builder = new BooleanQuery.Builder(); + builder.add(bq.build(), Occur.MUST); + builder.add(tq, Occur.FILTER); + query = builder.build(); } } else if(IIndex.SEARCH_PLUGIN.equals(type)) { if(term == null) { query = constructQuery(MAVEN.PACKAGING, "maven-plugin", SearchType.EXACT); //$NON-NLS-1$ } else { - BooleanQuery bq = new BooleanQuery(); + BooleanQuery.Builder bq = new BooleanQuery.Builder(); bq.add(constructQuery(MAVEN.GROUP_ID, term), Occur.SHOULD); //$NON-NLS-1$ bq.add(constructQuery(MAVEN.ARTIFACT_ID, term), Occur.SHOULD); //$NON-NLS-1$ Query tq = constructQuery(MAVEN.PACKAGING, "maven-plugin", SearchType.EXACT); //$NON-NLS-1$ - query = new FilteredQuery(tq, new QueryWrapperFilter(bq)); + BooleanQuery.Builder builder = new BooleanQuery.Builder(); + builder.add(bq.build(), Occur.MUST); + builder.add(tq, Occur.FILTER); + query = builder.build(); } } else if(IIndex.SEARCH_ARCHETYPE.equals(type)) { - BooleanQuery bq = new BooleanQuery(); + BooleanQuery.Builder bq = new BooleanQuery.Builder(); bq.add(constructQuery(MAVEN.GROUP_ID, term), Occur.SHOULD); //$NON-NLS-1$ bq.add(constructQuery(MAVEN.ARTIFACT_ID, term), Occur.SHOULD); //$NON-NLS-1$ Query tq = constructQuery(MAVEN.PACKAGING, "maven-archetype", SearchType.EXACT); //$NON-NLS-1$ - query = new FilteredQuery(tq, new QueryWrapperFilter(bq)); + BooleanQuery.Builder builder = new BooleanQuery.Builder(); + builder.add(bq.build(), Occur.MUST); + builder.add(tq, Occur.FILTER); + query = builder.build(); } else if(IIndex.SEARCH_PACKAGING.equals(type)) { query = constructQuery(MAVEN.PACKAGING, term); @@ -439,7 +447,7 @@ public class NexusIndexManager implements IndexManager, IMavenProjectChangedList } for(ArtifactInfo artifactInfo : response.getResults()) { - addArtifactFile(result, getIndexedArtifactFile(artifactInfo), null, null, artifactInfo.packaging); + addArtifactFile(result, getIndexedArtifactFile(artifactInfo), null, null, artifactInfo.getPackaging()); } // https://issues.sonatype.org/browse/MNGECLIPSE-1630 @@ -490,7 +498,7 @@ public class NexusIndexManager implements IndexManager, IMavenProjectChangedList } for(ArtifactInfo artifactInfo : response.getResults()) { - addArtifactFile(result, getIndexedArtifactFile(artifactInfo), null, null, artifactInfo.packaging); + addArtifactFile(result, getIndexedArtifactFile(artifactInfo), null, null, artifactInfo.getPackaging()); } } catch(IOException ex) { @@ -628,27 +636,20 @@ public class NexusIndexManager implements IndexManager, IMavenProjectChangedList fireIndexChanged(repository); } - private ArtifactContext getArtifactContext(File file, IndexingContext context) - throws IllegalArtifactCoordinateException { + private ArtifactContext getArtifactContext(File file, IndexingContext context) { return getArtifactContextProducer().getArtifactContext(context, file); } - private ArtifactContext getWorkspaceArtifactContext(IMavenProjectFacade facade, IndexingContext context) - throws CoreException { + private ArtifactContext getWorkspaceArtifactContext(IMavenProjectFacade facade, IndexingContext context) { IRepository workspaceRepository = repositoryRegistry.getWorkspaceRepository(); ArtifactKey key = facade.getArtifactKey(); ArtifactInfo ai = new ArtifactInfo(workspaceRepository.getUid(), key.getGroupId(), key.getArtifactId(), - key.getVersion(), null); - ai.packaging = facade.getPackaging(); + key.getVersion(), key.getClassifier(), null); + ai.setPackaging(facade.getPackaging()); File pomFile = facade.getPomFile(); File artifactFile = (pomFile != null) ? pomFile.getParentFile() : null; - try { - Gav gav = new Gav(key.getGroupId(), key.getArtifactId(), key.getVersion()); - return new ArtifactContext(pomFile, artifactFile, null, ai, gav); - } catch(IllegalArtifactCoordinateException ex) { - throw new CoreException(new Status(IStatus.ERROR, IMavenConstants.PLUGIN_ID, -1, - Messages.NexusIndexManager_error_unexpected, ex)); - } + Gav gav = new Gav(key.getGroupId(), key.getArtifactId(), key.getVersion()); + return new ArtifactContext(pomFile, artifactFile, null, ai, gav); } protected void scheduleIndexUpdate(final IRepository repository, final boolean force) { @@ -841,7 +842,7 @@ public class NexusIndexManager implements IndexManager, IMavenProjectChangedList } protected Directory getIndexDirectory(IRepository repository) throws IOException { - return FSDirectory.getDirectory(getIndexDirectoryFile(repository)); + return FSDirectory.open(getIndexDirectoryFile(repository).toPath()); } public IndexedArtifactGroup resolveGroup(IndexedArtifactGroup group) { @@ -1130,7 +1131,7 @@ public class NexusIndexManager implements IndexManager, IMavenProjectChangedList String details = getIndexDetails(repository); String id = repository.getUid() + "-cache"; //$NON-NLS-1$ File luceneCache = new File(request.getLocalIndexCacheDir(), details); - Directory directory = FSDirectory.getDirectory(luceneCache); + Directory directory = FSDirectory.open(luceneCache.toPath()); IndexingContext cacheCtx = getIndexer().addIndexingContextForced(id, id, null, directory, null, null, getIndexers(details)); request = newIndexUpdateRequest(repository, cacheCtx, monitor); @@ -1274,7 +1275,8 @@ public class NexusIndexManager implements IndexManager, IMavenProjectChangedList Query q = getIndexer().constructQuery(MAVEN.SHA1, encode(digest), SearchType.EXACT); - return getIndexer().identify(q, contexts); + Collection result = getIndexer().identify(q, contexts); + return result == null || result.isEmpty() ? null : (ArtifactInfo) result.toArray()[0]; } catch(NoSuchAlgorithmException ex) { throw new IOException("Unable to calculate digest"); -- 2.28.0