You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@netbeans.apache.org by GitBox <gi...@apache.org> on 2018/06/17 17:16:55 UTC

[GitHub] matthiasblaesing closed pull request #590: License cleanup part 2

matthiasblaesing closed pull request #590: License cleanup part 2
URL: https://github.com/apache/incubator-netbeans/pull/590
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/apisupport.harness/external/bindex-2.2-license.txt b/apisupport.harness/external/bindex-2.2-license.txt
index 09cf122ef..26570d781 100644
--- a/apisupport.harness/external/bindex-2.2-license.txt
+++ b/apisupport.harness/external/bindex-2.2-license.txt
@@ -1,10 +1,35 @@
 Name: BIndex
 Version: 2.2
-License: Apache-2.0
+License: Apache-2.0+MIT-Bindex
 Description: OSGi bundle repository indexer.
 Origin: OSGi
 URL: http://www.osgi.org/Repository/BIndex
 
+Parts of this work are licensed:
+
+Copyright (c) 2002,2003, Stefan Haustein, Oberhausen, Rhld., Germany
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The  above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+
+
+Parts of this work are licensed:
+
                                  Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
diff --git a/apisupport.harness/external/bindex-2.2-notice.txt b/apisupport.harness/external/bindex-2.2-notice.txt
new file mode 100644
index 000000000..d324648d8
--- /dev/null
+++ b/apisupport.harness/external/bindex-2.2-notice.txt
@@ -0,0 +1,7 @@
+OSGi OBR BIndex Program
+
+OSGi™ is a trademark, registered trademark, or service mark of The OSGi Alliance
+in the US and other countries. Java™ is a trademark, registered trademark, or
+service mark of Sun Microsystems, Inc. in the US and other countries. All other
+trademarks, registered trademarks, or service marks used in the Content are the
+property of their respective owners and are hereby recognized.
\ No newline at end of file
diff --git a/libs.springframework/external/spring-framework-3.2.7.RELEASE-notice.txt b/libs.springframework/external/spring-framework-3.2.7.RELEASE-notice.txt
new file mode 100644
index 000000000..98236224b
--- /dev/null
+++ b/libs.springframework/external/spring-framework-3.2.7.RELEASE-notice.txt
@@ -0,0 +1,2 @@
+Spring Framework 3.2.7.RELEASE
+Copyright (c) 2002-2014 Pivotal, Inc.
\ No newline at end of file
diff --git a/libs.springframework/external/spring-framework-4.0.1.RELEASE-notice.txt b/libs.springframework/external/spring-framework-4.0.1.RELEASE-notice.txt
new file mode 100644
index 000000000..f4a158924
--- /dev/null
+++ b/libs.springframework/external/spring-framework-4.0.1.RELEASE-notice.txt
@@ -0,0 +1,2 @@
+Spring Framework 4.0.1.RELEASE
+Copyright (c) 2002-2014 Pivotal, Inc.
\ No newline at end of file
diff --git a/libs.testng/external/testng-6.8.1-dist-license.txt b/libs.testng/external/testng-6.8.1-dist-license.txt
index 58a0b436a..b9cb04545 100644
--- a/libs.testng/external/testng-6.8.1-dist-license.txt
+++ b/libs.testng/external/testng-6.8.1-dist-license.txt
@@ -1,11 +1,44 @@
 Name: TestNG
 Version: 6.8.1
 Description: Java testing framework.
-License: Apache-2.0
+License: Apache-2.0+MIT+testng
 Origin: TestNG
 URL: http://testng.org/doc/download.html
 Files: testng-6.8.1-dist.jar, testng-6.8.1-javadoc.zip
 
+Parts of this work are licensed:
+
+The MIT License (MIT)
+
+Copyright 2011, John Resig
+Dual licensed under the MIT or GPL Version 2 licenses.
+http://jquery.org/license
+
+Includes Sizzle.js
+http://sizzlejs.com/
+Copyright 2011, The Dojo Foundation
+Released under the MIT, BSD, and GPL Licenses.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+Parts of this work are licensed:
+
                                 Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
diff --git a/libs.testng/external/testng-6.8.1-dist-notice.txt b/libs.testng/external/testng-6.8.1-dist-notice.txt
new file mode 100644
index 000000000..736c86744
--- /dev/null
+++ b/libs.testng/external/testng-6.8.1-dist-notice.txt
@@ -0,0 +1,4 @@
+JCommander Copyright Notices 
+============================
+
+Copyright 2010 Cedric Beust <ce...@beust.com>
\ No newline at end of file
diff --git a/maven.indexer/build.xml b/maven.indexer/build.xml
index 33cae5e4b..84a2d374a 100644
--- a/maven.indexer/build.xml
+++ b/maven.indexer/build.xml
@@ -23,22 +23,4 @@
 <project basedir="." default="build" name="maven.indexer">
     <description>Builds, tests, and runs the project org.netbeans.modules.maven.indexer2</description>
     <import file="../nbbuild/templates/projectized.xml"/>
-        
-    <condition property="indexer.file.notfound">
-        <not>
-            <!-- make sure notice-patched is added to indexer-core only once -->
-            <available file="external/indexer-core-6.0-SNAPSHOT-patched.jar"/>
-        </not>
-    </condition>    
-    
-    <target name="maven-indexer-notice" depends="projectized-common.-release.files" if="indexer.file.notfound">
-        <jar destfile="external/indexer-core-6.0-SNAPSHOT-patched.jar" update="true">            
-            <mappedresources>
-                <fileset file="external/NOTICE-patched-indexer-core-5.1.1"/>
-                <globmapper from="NOTICE-patched-indexer-core-6.0-SNAPSHOT" to="META-INF/NOTICE-patched"/>
-            </mappedresources>
-        </jar>
-    </target>    
-    
-    <target name="netbeans-extra" depends="maven-indexer-notice"/>
 </project>
diff --git a/maven.indexer/external/NOTICE-patched-indexer-core-6.0.0 b/maven.indexer/external/NOTICE-patched-indexer-core-6.0.0
deleted file mode 100644
index 58c6bf07d..000000000
--- a/maven.indexer/external/NOTICE-patched-indexer-core-6.0.0
+++ /dev/null
@@ -1,6 +0,0 @@
-Patched indexer-core-6.0.0-SNAPSHOT.jar
-=======================================
-
-Contents of original indexer-core-6.0.0-SNAPSHOT.jar changed by Oracle.
-Patch url:             http://hg.netbeans.org/main-golden/file/tip/maven.indexer/external/mvn-indexer.patch
-maven-indexer sources: https://github.com/apache/maven-indexer #a7aeb9f2fe34e6c9f52
\ No newline at end of file
diff --git a/maven.indexer/external/binaries-list b/maven.indexer/external/binaries-list
index 0527a4b99..a2474f6db 100644
--- a/maven.indexer/external/binaries-list
+++ b/maven.indexer/external/binaries-list
@@ -14,9 +14,9 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-627EC612B8D50EE42C2D0F13DF5476E26D696634 indexer-core-6.0-SNAPSHOT-patched.jar
-20540C6347259F35A0D264605B22CE2A13917066 org.apache.lucene:lucene-core:5.5.3
-D276E74D57C64ED5F9A09A48DA05B75555E8709A org.apache.lucene:lucene-highlighter:5.5.3
-E2452203D2C44CAC5AC42B34E5DCC0A44BF29A53 org.apache.lucene:lucene-queryparser:5.5.3
-CF734AB72813AF33DC1544CE61ABC5C17B9D35E9 org.apache.lucene:lucene-analyzers-common:5.5.3
+677D6A3009E8619D39E3F8BDB39352DD7CA7D155 org.apache.maven.indexer:indexer-core:6.0.0
+C34BCD9274859DC07CFED2A935AACA90C4F4B861 org.apache.lucene:lucene-core:5.5.5
+65642FBAD8D42403B679438B22A493EE114D8DE5 org.apache.lucene:lucene-highlighter:5.5.5
+6C965EB5838A2BA58B0DE0FD860A420DCDA11937 org.apache.lucene:lucene-queryparser:5.5.5
+E6B3F5D1B33ED24DA7EEF0A72F8062BD4652700C org.apache.lucene:lucene-analyzers-common:5.5.5
 479C1E06DB31C432330183F5CAE684163F186146 javax.annotation:javax.annotation-api:1.2
diff --git a/maven.indexer/external/indexer-core-6.0-SNAPSHOT-patched-license.txt b/maven.indexer/external/indexer-core-6.0.0-license.txt
similarity index 99%
rename from maven.indexer/external/indexer-core-6.0-SNAPSHOT-patched-license.txt
rename to maven.indexer/external/indexer-core-6.0.0-license.txt
index e26c1ee36..521374493 100644
--- a/maven.indexer/external/indexer-core-6.0-SNAPSHOT-patched-license.txt
+++ b/maven.indexer/external/indexer-core-6.0.0-license.txt
@@ -1,6 +1,6 @@
 Name: Maven Indexer
 Description: Maven remote repository indexing engine.
-Version: 6.0-SNAPSHOT-patched
+Version: 6.0.0
 Origin: Apache Software Foundation
 License: Apache-2.0
 URL: http://repo1.maven.org/maven2/org/apache/maven/indexer/
diff --git a/maven.indexer/external/indexer-core-6.0.0-notice.txt b/maven.indexer/external/indexer-core-6.0.0-notice.txt
new file mode 100644
index 000000000..04c2039fc
--- /dev/null
+++ b/maven.indexer/external/indexer-core-6.0.0-notice.txt
@@ -0,0 +1,5 @@
+Maven :: Indexer Core
+Copyright 2002-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/maven.indexer/external/lucene-5.5.3-license.txt b/maven.indexer/external/lucene-5.5.5-license.txt
similarity index 98%
rename from maven.indexer/external/lucene-5.5.3-license.txt
rename to maven.indexer/external/lucene-5.5.5-license.txt
index 3b0068c21..52802f71b 100644
--- a/maven.indexer/external/lucene-5.5.3-license.txt
+++ b/maven.indexer/external/lucene-5.5.5-license.txt
@@ -1,11 +1,11 @@
 Name: Apache Lucene
 Description: Java-based indexing and search technology
-Version: 5.5.3
+Version: 5.5.5
 Origin: Apache Software Foundation
 License: Apache-2.0
 URL: http://lucene.apache.org/
 Source: http://svn.apache.org/repos/asf/lucene/java/trunk
-Files: lucene-analyzers-common-5.5.3.jar lucene-core-5.5.3.jar lucene-highlighter-5.5.3.jar lucene-queryparser-5.5.3.jar
+Files: lucene-analyzers-common-5.5.5.jar lucene-core-5.5.5.jar lucene-highlighter-5.5.5.jar lucene-queryparser-5.5.5.jar
 
                                  Apache License
                            Version 2.0, January 2004
diff --git a/maven.indexer/external/lucene-5.5.3-notice.txt b/maven.indexer/external/lucene-5.5.5-notice.txt
similarity index 100%
rename from maven.indexer/external/lucene-5.5.3-notice.txt
rename to maven.indexer/external/lucene-5.5.5-notice.txt
diff --git a/maven.indexer/external/mvn-indexer.patch b/maven.indexer/external/mvn-indexer.patch
deleted file mode 100644
index d9591d572..000000000
--- a/maven.indexer/external/mvn-indexer.patch
+++ /dev/null
@@ -1,1617 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-diff --git a/indexer-cli/src/main/java/org/apache/maven/index/cli/NexusIndexerCli.java b/indexer-cli/src/main/java/org/apache/maven/index/cli/NexusIndexerCli.java
-index 9f33f67..e57a2a7 100644
---- a/indexer-cli/src/main/java/org/apache/maven/index/cli/NexusIndexerCli.java
-+++ b/indexer-cli/src/main/java/org/apache/maven/index/cli/NexusIndexerCli.java
-@@ -418,7 +418,7 @@ public class NexusIndexerCli
-         final List<IndexCreator> indexers = getIndexers( cli, plexus );
- 
-         try (BufferedInputStream is = new BufferedInputStream( new FileInputStream( indexArchive ) ); //
--             FSDirectory directory = FSDirectory.open( outputFolder ))
-+             FSDirectory directory = FSDirectory.open( outputFolder.toPath() ))
-         {
-             DefaultIndexUpdater.unpackIndexData( is, directory, (IndexingContext) Proxy.newProxyInstance(
-                 getClass().getClassLoader(), new Class[] { IndexingContext.class }, new PartialImplementation()
-diff --git a/indexer-core/src/main/java/org/apache/maven/index/DefaultIteratorResultSet.java b/indexer-core/src/main/java/org/apache/maven/index/DefaultIteratorResultSet.java
-index 5abebc5..d8d7120 100644
---- a/indexer-core/src/main/java/org/apache/maven/index/DefaultIteratorResultSet.java
-+++ b/indexer-core/src/main/java/org/apache/maven/index/DefaultIteratorResultSet.java
-@@ -368,7 +368,6 @@ public class DefaultIteratorResultSet
-         
-         Analyzer analyzer = context.getAnalyzer();
-         TokenStream baseTokenStream = analyzer.tokenStream( field.getKey(), new StringReader( text ) );
--        baseTokenStream.reset();
-         
-         CachingTokenFilter tokenStream = new CachingTokenFilter(baseTokenStream);
- 
-@@ -389,9 +388,6 @@ public class DefaultIteratorResultSet
- 
-         List<String> bestFragments = getBestFragments( hr.getQuery(), formatter, tokenStream, text, 3 );
-         
--        tokenStream.end();
--        tokenStream.close();
--        
-         return bestFragments;
-     }
- 
-diff --git a/indexer-core/src/main/java/org/apache/maven/index/DefaultNexusIndexer.java b/indexer-core/src/main/java/org/apache/maven/index/DefaultNexusIndexer.java
-index 0d976a1..5453caa 100644
---- a/indexer-core/src/main/java/org/apache/maven/index/DefaultNexusIndexer.java
-+++ b/indexer-core/src/main/java/org/apache/maven/index/DefaultNexusIndexer.java
-@@ -279,7 +279,7 @@ public class DefaultNexusIndexer
-         IndexingContext tmpContext = null;
-         try
-         {
--            final FSDirectory directory = FSDirectory.open( tmpDir );
-+            final FSDirectory directory = FSDirectory.open( tmpDir.toPath() );
-             if ( update )
-             {
-                 IndexUtils.copyDirectory( context.getIndexDirectory(), directory );
-diff --git a/indexer-core/src/main/java/org/apache/maven/index/DefaultQueryCreator.java b/indexer-core/src/main/java/org/apache/maven/index/DefaultQueryCreator.java
-index b00cd96..f47bead 100644
---- a/indexer-core/src/main/java/org/apache/maven/index/DefaultQueryCreator.java
-+++ b/indexer-core/src/main/java/org/apache/maven/index/DefaultQueryCreator.java
-@@ -141,7 +141,7 @@ public class DefaultQueryCreator
-         }
-         else
-         {
--            QueryParser qp = new QueryParser( Version.LUCENE_46, field, new NexusAnalyzer() );
-+            QueryParser qp = new QueryParser( field, new NexusAnalyzer() );
- 
-             // small cheap trick
-             // if a query is not "expert" (does not contain field:val kind of expression)
-@@ -273,7 +273,7 @@ public class DefaultQueryCreator
-             {
-                 String qpQuery = query.toLowerCase().replaceAll( "\\.", " " ).replaceAll( "/", " " );
-                 // tokenization should happen against the field!
--                QueryParser qp = new QueryParser( Version.LUCENE_46, indexerField.getKey(), new NexusAnalyzer() );
-+                QueryParser qp = new QueryParser( indexerField.getKey(), new NexusAnalyzer() );
-                 qp.setDefaultOperator( Operator.AND );
-                 return qp.parse( qpQuery );
-             }
-@@ -306,7 +306,7 @@ public class DefaultQueryCreator
-                 String qpQuery = query;
- 
-                 // tokenization should happen against the field!
--                QueryParser qp = new QueryParser( Version.LUCENE_46, indexerField.getKey(), new NexusAnalyzer() );
-+                QueryParser qp = new QueryParser( indexerField.getKey(), new NexusAnalyzer() );
-                 qp.setDefaultOperator( Operator.AND );
- 
-                 // small cheap trick
-diff --git a/indexer-core/src/main/java/org/apache/maven/index/DefaultScannerListener.java b/indexer-core/src/main/java/org/apache/maven/index/DefaultScannerListener.java
-index 52b94ec..6da05f2 100644
---- a/indexer-core/src/main/java/org/apache/maven/index/DefaultScannerListener.java
-+++ b/indexer-core/src/main/java/org/apache/maven/index/DefaultScannerListener.java
-@@ -261,7 +261,7 @@ public class DefaultScannerListener
-         {
-             for ( String uinfo : uinfos )
-             {
--                TopScoreDocCollector collector = TopScoreDocCollector.create( 1, false );
-+                TopScoreDocCollector collector = TopScoreDocCollector.create( 1 );
- 
-                 indexSearcher.search( new TermQuery( new Term( ArtifactInfo.UINFO, uinfo ) ), collector );
- 
-@@ -318,4 +318,4 @@ public class DefaultScannerListener
-         result.setDeletedFiles( deleted );
-     }
- 
--}
-\ No newline at end of file
-+}
-diff --git a/indexer-core/src/main/java/org/apache/maven/index/DefaultSearchEngine.java b/indexer-core/src/main/java/org/apache/maven/index/DefaultSearchEngine.java
-index 841bf1c..4bef62b 100644
---- a/indexer-core/src/main/java/org/apache/maven/index/DefaultSearchEngine.java
-+++ b/indexer-core/src/main/java/org/apache/maven/index/DefaultSearchEngine.java
-@@ -330,7 +330,7 @@ public class DefaultSearchEngine
-         if ( AbstractSearchRequest.UNDEFINED != topHitCount )
-         {
-             // count is set, simply just execute it as-is
--            final TopScoreDocCollector hits = TopScoreDocCollector.create( topHitCount, true );
-+            final TopScoreDocCollector hits = TopScoreDocCollector.create( topHitCount );
- 
-             indexSearcher.search( query, hits );
- 
-@@ -342,7 +342,7 @@ public class DefaultSearchEngine
-             topHitCount = 1000;
- 
-             // perform search
--            TopScoreDocCollector hits = TopScoreDocCollector.create( topHitCount, true );
-+            TopScoreDocCollector hits = TopScoreDocCollector.create( topHitCount );
-             indexSearcher.search( query, hits );
- 
-             // check total hits against, does it fit?
-@@ -361,7 +361,7 @@ public class DefaultSearchEngine
-                 }
- 
-                 // redo all, but this time with correct numbers
--                hits = TopScoreDocCollector.create( topHitCount, true );
-+                hits = TopScoreDocCollector.create( topHitCount );
-                 indexSearcher.search( query, hits );
-             }
- 
-diff --git a/indexer-core/src/main/java/org/apache/maven/index/context/AbstractIndexingContext.java b/indexer-core/src/main/java/org/apache/maven/index/context/AbstractIndexingContext.java
-index 37ec5c1..c2e864d 100644
---- a/indexer-core/src/main/java/org/apache/maven/index/context/AbstractIndexingContext.java
-+++ b/indexer-core/src/main/java/org/apache/maven/index/context/AbstractIndexingContext.java
-@@ -28,7 +28,8 @@ public abstract class AbstractIndexingContext
-     {
-         try
-         {
--            return getIndexDirectory().fileExists( INDEX_UPDATER_PROPERTIES_FILE );
-+            getIndexDirectory().fileLength(INDEX_UPDATER_PROPERTIES_FILE);
-+            return true;
-         }
-         catch ( IOException e )
-         {
-diff --git a/indexer-core/src/main/java/org/apache/maven/index/context/DefaultIndexingContext.java b/indexer-core/src/main/java/org/apache/maven/index/context/DefaultIndexingContext.java
-index afae82b..07f907d 100644
---- a/indexer-core/src/main/java/org/apache/maven/index/context/DefaultIndexingContext.java
-+++ b/indexer-core/src/main/java/org/apache/maven/index/context/DefaultIndexingContext.java
-@@ -21,6 +21,11 @@ package org.apache.maven.index.context;
- 
- import java.io.File;
- import java.io.IOException;
-+import java.nio.channels.FileChannel;
-+import java.nio.channels.FileLock;
-+import java.nio.file.Files;
-+import java.nio.file.Path;
-+import java.nio.file.StandardOpenOption;
- import java.util.Arrays;
- import java.util.Collection;
- import java.util.Collections;
-@@ -45,6 +50,9 @@ import org.apache.lucene.search.TopDocs;
- import org.apache.lucene.search.TopScoreDocCollector;
- import org.apache.lucene.store.Directory;
- import org.apache.lucene.store.FSDirectory;
-+import org.apache.lucene.store.FSLockFactory;
-+import org.apache.lucene.store.Lock;
-+import org.apache.lucene.store.LockObtainFailedException;
- import org.apache.lucene.util.Bits;
- import org.apache.maven.index.ArtifactInfo;
- import org.apache.maven.index.artifact.GavCalculator;
-@@ -77,6 +85,8 @@ public class DefaultIndexingContext
- 
-     private Directory indexDirectory;
- 
-+    private TrackingLockFactory lockFactory;
-+
-     private File indexDirectoryFile;
- 
-     private String id;
-@@ -111,9 +121,11 @@ public class DefaultIndexingContext
-                                     File repository, //
-                                     String repositoryUrl, String indexUpdateUrl,
-                                     List<? extends IndexCreator> indexCreators, Directory indexDirectory,
-+                                    TrackingLockFactory lockFactory,
-                                     boolean reclaimIndex )
-         throws ExistingLuceneIndexMismatchException, IOException
-     {
-+
-         this.id = id;
- 
-         this.searchable = true;
-@@ -134,6 +146,8 @@ public class DefaultIndexingContext
- 
-         this.indexDirectory = indexDirectory;
- 
-+        this.lockFactory = lockFactory;
-+
-         // eh?
-         // Guice does NOT initialize these, and we have to do manually?
-         // While in Plexus, all is well, but when in guice-shim,
-@@ -150,16 +164,25 @@ public class DefaultIndexingContext
-         setIndexDirectoryFile( null );
-     }
- 
--    public DefaultIndexingContext( String id, String repositoryId, File repository, File indexDirectoryFile,
--                                   String repositoryUrl, String indexUpdateUrl,
-+    private DefaultIndexingContext( String id, String repositoryId, File repository, File indexDirectoryFile,
-+                                   TrackingLockFactory lockFactory, String repositoryUrl, String indexUpdateUrl,
-                                    List<? extends IndexCreator> indexCreators, boolean reclaimIndex )
-         throws IOException, ExistingLuceneIndexMismatchException
-     {
-         this( id, repositoryId, repository, repositoryUrl, indexUpdateUrl, indexCreators,
--            FSDirectory.open( indexDirectoryFile ), reclaimIndex );
-+            FSDirectory.open( indexDirectoryFile.toPath(), lockFactory ), lockFactory, reclaimIndex );
- 
-         setIndexDirectoryFile( indexDirectoryFile );
-     }
-+    
-+    public DefaultIndexingContext( String id, String repositoryId, File repository, File indexDirectoryFile,
-+                                   String repositoryUrl, String indexUpdateUrl,
-+                                   List<? extends IndexCreator> indexCreators, boolean reclaimIndex )
-+        throws IOException, ExistingLuceneIndexMismatchException
-+    {
-+                this( id, repositoryId, repository, indexDirectoryFile, new TrackingLockFactory(FSLockFactory.getDefault()),
-+                        repositoryUrl, indexUpdateUrl, indexCreators, reclaimIndex);
-+    }
- 
-     @Deprecated
-     public DefaultIndexingContext( String id, String repositoryId, File repository, Directory indexDirectory,
-@@ -167,11 +190,11 @@ public class DefaultIndexingContext
-                                    List<? extends IndexCreator> indexCreators, boolean reclaimIndex )
-         throws IOException, ExistingLuceneIndexMismatchException
-     {
--        this( id, repositoryId, repository, repositoryUrl, indexUpdateUrl, indexCreators, indexDirectory, reclaimIndex );
-+        this( id, repositoryId, repository, repositoryUrl, indexUpdateUrl, indexCreators, indexDirectory, null, reclaimIndex ); //Lock factory already installed - pass null
- 
-         if ( indexDirectory instanceof FSDirectory )
-         {
--            setIndexDirectoryFile(( (FSDirectory) indexDirectory ).getDirectory() );
-+            setIndexDirectoryFile(( (FSDirectory) indexDirectory ).getDirectory().toFile() );
-         }
-     }
- 
-@@ -215,7 +238,7 @@ public class DefaultIndexingContext
-                 // unlock the dir forcibly
-                 if ( IndexWriter.isLocked( indexDirectory ) )
-                 {
--                    IndexWriter.unlock( indexDirectory );
-+                    unlockForciebly( lockFactory, indexDirectory );
-                 }
- 
-                 openAndWarmup();
-@@ -252,7 +275,7 @@ public class DefaultIndexingContext
-             // unlock the dir forcibly
-             if ( IndexWriter.isLocked( indexDirectory ) )
-             {
--                IndexWriter.unlock( indexDirectory );
-+                unlockForciebly( lockFactory, indexDirectory );
-             }
- 
-             deleteIndexFiles( true );
-@@ -281,7 +304,7 @@ public class DefaultIndexingContext
-         // check for descriptor if this is not a "virgin" index
-         if ( getSize() > 0 )
-         {
--            final TopScoreDocCollector collector = TopScoreDocCollector.create( 1, false );
-+            final TopScoreDocCollector collector = TopScoreDocCollector.create( 1 );
-             final IndexSearcher indexSearcher = acquireIndexSearcher();
-             try
-             {
-@@ -369,14 +392,17 @@ public class DefaultIndexingContext
- 
-             if ( full )
-             {
--                if ( indexDirectory.fileExists( INDEX_PACKER_PROPERTIES_FILE ) )
--                {
-+                
-+                try {
-                     indexDirectory.deleteFile( INDEX_PACKER_PROPERTIES_FILE );
-+                } catch (IOException ioe) {
-+                    //Does not exist
-                 }
- 
--                if ( indexDirectory.fileExists( INDEX_UPDATER_PROPERTIES_FILE ) )
--                {
-+                try {
-                     indexDirectory.deleteFile( INDEX_UPDATER_PROPERTIES_FILE );
-+                } catch (IOException ioe) {
-+                    //Does not exist
-                 }
-             }
- 
-@@ -546,7 +572,6 @@ public class DefaultIndexingContext
-     public synchronized void optimize()
-         throws CorruptIndexException, IOException
-     {
--        getIndexWriter().forceMerge(1);
-         commit();
-     }
- 
-@@ -587,6 +612,12 @@ public class DefaultIndexingContext
-     public synchronized void replace( Directory directory )
-         throws IOException
-     {
-+        replace(directory, null, null);
-+    }
-+
-+    public synchronized void replace( Directory directory, Set<String> allGroups, Set<String> rootGroups)
-+        throws IOException
-+    {
-         final Date ts = IndexUtils.getTimestamp( directory );
-         closeReaders();
-         deleteIndexFiles( false );
-@@ -594,7 +625,16 @@ public class DefaultIndexingContext
-         openAndWarmup();
-         // reclaim the index as mine
-         storeDescriptor();
-+        if(allGroups == null && rootGroups == null) {
-         rebuildGroups();
-+        } else {
-+            if(allGroups != null) {
-+                setAllGroups(allGroups);
-+            }
-+            if(rootGroups != null) {
-+                setRootGroups(rootGroups);
-+            }
-+        }
-         updateTimestamp( true, ts );
-         optimize();
-     }
-@@ -612,7 +652,7 @@ public class DefaultIndexingContext
-         try
-         {
-             final IndexWriter w = getIndexWriter();
--            final IndexReader directoryReader = IndexReader.open( directory);
-+            final IndexReader directoryReader = DirectoryReader.open( directory);
-             TopScoreDocCollector collector = null;
-             try
-             {
-@@ -635,7 +675,7 @@ public class DefaultIndexingContext
-                     String uinfo = d.get( ArtifactInfo.UINFO );
-                     if ( uinfo != null )
-                     {
--                        collector = TopScoreDocCollector.create( 1, false );
-+                        collector = TopScoreDocCollector.create( 1 );
-                         s.search( new TermQuery( new Term( ArtifactInfo.UINFO, uinfo ) ), collector );
-                         if ( collector.getTotalHits() == 0 )
-                         {
-@@ -706,7 +746,7 @@ public class DefaultIndexingContext
- 
-     public List<IndexCreator> getIndexCreators()
-     {
--        return Collections.unmodifiableList( indexCreators );
-+        return Collections.<IndexCreator>unmodifiableList( indexCreators );
-     }
- 
-     // groups
-@@ -784,7 +824,7 @@ public class DefaultIndexingContext
-     protected Set<String> getGroups( String field, String filedValue, String listField )
-         throws IOException, CorruptIndexException
-     {
--        final TopScoreDocCollector collector = TopScoreDocCollector.create( 1, false );
-+        final TopScoreDocCollector collector = TopScoreDocCollector.create( 1);
-         final IndexSearcher indexSearcher = acquireIndexSearcher();
-         try
-         {
-@@ -833,4 +873,43 @@ public class DefaultIndexingContext
-     {
-         return id + " : " + timestamp;
-     }
-+
-+    private static void unlockForciebly(final TrackingLockFactory lockFactory, final Directory dir) throws IOException
-+    {
-+        //Warning: Not doable in lucene >= 5.3 consider to remove it as IndexWriter.unlock
-+        //was always strongly non recommended by Lucene.
-+        //For now try to do the best to simulate the IndexWriter.unlock at least on FSDirectory
-+        //using FSLockFactory, the RAMDirectory uses SingleInstanceLockFactory.
-+        //custom lock factory?
-+        if (lockFactory != null) {
-+            final Set<? extends Lock> emittedLocks = lockFactory.getEmittedLocks(IndexWriter.WRITE_LOCK_NAME);
-+            for (Lock emittedLock : emittedLocks) {
-+                emittedLock.close();
-+            }
-+        }
-+        if (dir instanceof FSDirectory) {
-+            final FSDirectory fsdir = (FSDirectory) dir;
-+            final Path dirPath = fsdir.getDirectory();
-+            if (Files.isDirectory(dirPath)) {
-+                Path lockPath = dirPath.resolve(IndexWriter.WRITE_LOCK_NAME);
-+                try {
-+                    lockPath = lockPath.toRealPath();
-+                } catch (IOException ioe) {
-+                    //Not locked
-+                    return;
-+                }
-+                try (final FileChannel fc = FileChannel.open(lockPath, StandardOpenOption.CREATE, StandardOpenOption.WRITE)) {
-+                    final FileLock lck = fc.tryLock();
-+                    if (lck == null) {
-+                        //Still active
-+                        throw new LockObtainFailedException("Lock held by another process: " + lockPath);
-+                    } else {
-+                        //Not held fine to release
-+                        lck.close();
-+                    }
-+                }
-+                Files.delete(lockPath);
-+            }
-+        }
-+    }
- }
-diff --git a/indexer-core/src/main/java/org/apache/maven/index/context/IndexUtils.java b/indexer-core/src/main/java/org/apache/maven/index/context/IndexUtils.java
-index d10461c..d5fe697 100644
---- a/indexer-core/src/main/java/org/apache/maven/index/context/IndexUtils.java
-+++ b/indexer-core/src/main/java/org/apache/maven/index/context/IndexUtils.java
-@@ -20,9 +20,11 @@ package org.apache.maven.index.context;
-  */
- 
- import java.io.File;
-+import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
-+import java.nio.file.NoSuchFileException;
- import java.util.Date;
- 
- import org.apache.lucene.document.Document;
-@@ -52,7 +54,7 @@ public class IndexUtils
-         
-         for (String file : source.listAll())
-         {
--            source.copy(target, file, file, IOContext.DEFAULT); 
-+            target.copyFrom(source, file, file, IOContext.DEFAULT);
-         }
- 
-         copyFile( source, target, IndexingContext.INDEX_UPDATER_PROPERTIES_FILE );
-@@ -70,42 +72,14 @@ public class IndexUtils
- 
-     public static boolean copyFile( Directory source, Directory target, String srcName, String targetName )
-         throws IOException
--    {
--        if ( !source.fileExists( srcName ) )
--        {
-+    {        
-+        try {
-+            source.fileLength(srcName); // instead of fileExists
-+        } catch (FileNotFoundException | NoSuchFileException e) {
-             return false;
-         }
--
--        byte[] buf = new byte[BUFFER_SIZE];
--
--        IndexInput is = null;
--        IndexOutput os = null;
--
--        try
--        {
--            is = source.openInput( srcName, IOContext.DEFAULT);
--
--            os = target.createOutput( targetName, IOContext.DEFAULT);
--
--            // and copy to dest directory
--            long len = is.length();
--            long readCount = 0;
--            while ( readCount < len )
--            {
--                int toRead = readCount + BUFFER_SIZE > len ? (int) ( len - readCount ) : BUFFER_SIZE;
--                is.readBytes( buf, 0, toRead );
--                os.writeBytes( buf, toRead );
--                readCount += toRead;
--            }
--
--            return true;
--        }
--        finally
--        {
--            close( os );
--
--            close( is );
--        }
-+        target.copyFrom(source, srcName, targetName, IOContext.DEFAULT);
-+        return true;
-     }
- 
-     // timestamp
-@@ -155,12 +129,18 @@ public class IndexUtils
- 
-     public static Document updateDocument( Document doc, IndexingContext context, boolean updateLastModified )
-     {
--        ArtifactInfo ai = constructArtifactInfo( doc, context );
--        if ( ai == null )
--        {
--            return doc;
--        }
-+         return updateDocument(doc, context, updateLastModified, null);
-+    }
- 
-+    public static Document updateDocument( Document doc, IndexingContext context, boolean updateLastModified, ArtifactInfo ai )
-+    {
-+        if( ai == null ) {
-+            ai = constructArtifactInfo( doc, context );
-+            if ( ai == null )
-+            {
-+                return doc;
-+            }
-+        }
-         Document document = new Document();
- 
-         // unique key
-@@ -187,10 +167,14 @@ public class IndexUtils
-     public static void deleteTimestamp( Directory directory )
-         throws IOException
-     {
--        if ( directory.fileExists( TIMESTAMP_FILE ) )
-+        try
-         {
-             directory.deleteFile( TIMESTAMP_FILE );
-         }
-+        catch (FileNotFoundException | NoSuchFileException e)
-+        {
-+            //Does not exist
-+        }
-     }
- 
-     public static void updateTimestamp( Directory directory, Date timestamp )
-@@ -209,8 +193,6 @@ public class IndexUtils
-                 try
-                 {
-                     io.writeLong( timestamp.getTime() );
--
--                    io.flush();
-                 }
-                 finally
-                 {
-@@ -225,26 +207,13 @@ public class IndexUtils
-         synchronized ( directory )
-         {
-             Date result = null;
--            try
--            {
--                if ( directory.fileExists( TIMESTAMP_FILE ) )
--                {
--                    IndexInput ii = null;
--
--                    try
--                    {
--                        ii = directory.openInput( TIMESTAMP_FILE, IOContext.DEFAULT);
--
--                        result = new Date( ii.readLong() );
--                    }
--                    finally
--                    {
--                        close( ii );
--                    }
--                }
--            }
--            catch ( IOException ex )
-+            try (IndexInput ii = directory.openInput( TIMESTAMP_FILE, IOContext.DEFAULT)) {
-+                result = new Date( ii.readLong() );
-+            } catch (FileNotFoundException | NoSuchFileException e) {
-+                //Does not exist
-+            } catch ( IOException ex )
-             {
-+                //IO failure
-             }
- 
-             return result;
-diff --git a/indexer-core/src/main/java/org/apache/maven/index/context/IndexingContext.java b/indexer-core/src/main/java/org/apache/maven/index/context/IndexingContext.java
-index 49a397d..5aaad69 100644
---- a/indexer-core/src/main/java/org/apache/maven/index/context/IndexingContext.java
-+++ b/indexer-core/src/main/java/org/apache/maven/index/context/IndexingContext.java
-@@ -268,6 +268,9 @@ public interface IndexingContext
-     void replace( Directory directory )
-         throws IOException;
- 
-+    void replace( Directory directory, Set<String> allGroups, Set<String> rootGroups )
-+        throws IOException;
-+
-     Directory getIndexDirectory();
- 
-     File getIndexDirectoryFile();
-diff --git a/indexer-core/src/main/java/org/apache/maven/index/context/MergedIndexingContext.java b/indexer-core/src/main/java/org/apache/maven/index/context/MergedIndexingContext.java
-index fc008ff..45d93c7 100644
---- a/indexer-core/src/main/java/org/apache/maven/index/context/MergedIndexingContext.java
-+++ b/indexer-core/src/main/java/org/apache/maven/index/context/MergedIndexingContext.java
-@@ -79,7 +79,7 @@ public class MergedIndexingContext
-                                   boolean searchable, ContextMemberProvider membersProvider )
-         throws IOException
-     {
--        this( membersProvider, id, repositoryId, repository, FSDirectory.open( indexDirectoryFile ), searchable );
-+        this( membersProvider, id, repositoryId, repository, FSDirectory.open( indexDirectoryFile.toPath() ), searchable );
- 
-         setIndexDirectoryFile( indexDirectoryFile );
-     }
-@@ -93,7 +93,7 @@ public class MergedIndexingContext
- 
-         if ( indexDirectory instanceof FSDirectory )
-         {
--            setIndexDirectoryFile( ( (FSDirectory) indexDirectory ).getDirectory() );
-+            setIndexDirectoryFile( ( (FSDirectory) indexDirectory ).getDirectory().toFile() );
-         }
-     }
- 
-@@ -282,6 +282,12 @@ public class MergedIndexingContext
-         // noop
-     }
- 
-+    public void replace( Directory directory, Set<String> allGroups, Set<String> rootGroups )
-+        throws IOException
-+    {
-+        // noop
-+    }
-+
-     public Directory getIndexDirectory()
-     {
-         return directory;
-diff --git a/indexer-core/src/main/java/org/apache/maven/index/context/NexusAnalyzer.java b/indexer-core/src/main/java/org/apache/maven/index/context/NexusAnalyzer.java
-index 02a1e37..45be8b7 100644
---- a/indexer-core/src/main/java/org/apache/maven/index/context/NexusAnalyzer.java
-+++ b/indexer-core/src/main/java/org/apache/maven/index/context/NexusAnalyzer.java
-@@ -21,6 +21,7 @@ package org.apache.maven.index.context;
- 
- import java.io.Reader;
- import org.apache.lucene.analysis.Analyzer;
-+import org.apache.lucene.analysis.AnalyzerWrapper;
- import org.apache.lucene.analysis.Tokenizer;
- import org.apache.lucene.analysis.util.CharTokenizer;
- import org.apache.lucene.util.Version;
-@@ -35,41 +36,52 @@ import org.apache.maven.index.creator.JarFileContentsIndexCreator;
-  * @author cstamas
-  */
- public final class NexusAnalyzer
--    extends Analyzer
-+    extends AnalyzerWrapper
- {
-+    private static final Analyzer CLASS_NAMES_ANALYZER = new Analyzer()
-+        {
-+        @Override
-+        protected TokenStreamComponents createComponents(String fieldName)
-+        {
-+            return new TokenStreamComponents(new DeprecatedClassnamesTokenizer());
-+        }
-+    };
-+    private static final Analyzer LETTER_OR_DIGIT_ANALYZER = new Analyzer()
-+    {
-+        @Override
-+        protected TokenStreamComponents createComponents(String filedName)
-+        {
-+            return new TokenStreamComponents(new LetterOrDigitTokenizer());
-+        }
-+    };
- 
-     public NexusAnalyzer()
-     {
-         super(PER_FIELD_REUSE_STRATEGY);
-     }
--    
--    protected Tokenizer getTokenizer( String fieldName, Reader reader )
-+
-+    @Override
-+    protected Analyzer getWrappedAnalyzer(String fieldName)
-     {
-         if ( JarFileContentsIndexCreator.FLD_CLASSNAMES_KW.getKey().equals( fieldName ) )
-         {
-             // To keep "backward" compatibility, we have to use old flawed tokenizer.
--            return new DeprecatedClassnamesTokenizer( reader );
-+            return CLASS_NAMES_ANALYZER;
-         }
-         else
-         {
--            return new LetterOrDigitTokenizer( reader );
-+            return LETTER_OR_DIGIT_ANALYZER;
-         }
-     }
- 
--    @Override
--    protected TokenStreamComponents createComponents(String fieldName, Reader reader)
--    {
--        return new TokenStreamComponents(getTokenizer(fieldName, reader));
--    }
--
-     // ==
- 
-     public static class NoopTokenizer
-         extends CharTokenizer
-     {
--        public NoopTokenizer( Reader in )
-+        public NoopTokenizer()
-         {
--            super( Version.LUCENE_46, in );
-+            super();
-         }
- 
-         @Override
-@@ -83,9 +95,9 @@ public final class NexusAnalyzer
-     public static class DeprecatedClassnamesTokenizer
-         extends CharTokenizer
-     {
--        public DeprecatedClassnamesTokenizer( Reader in )
-+        public DeprecatedClassnamesTokenizer()
-         {
--            super( Version.LUCENE_46, in );
-+            super();
-         }
-         
-         @Override
-@@ -104,9 +116,9 @@ public final class NexusAnalyzer
-     public static class LetterOrDigitTokenizer
-         extends CharTokenizer
-     {
--        public LetterOrDigitTokenizer( Reader in )
-+        public LetterOrDigitTokenizer()
-         {
--            super( Version.LUCENE_46, in );
-+            super();
-         }
- 
-         @Override
-diff --git a/indexer-core/src/main/java/org/apache/maven/index/context/NexusIndexWriter.java b/indexer-core/src/main/java/org/apache/maven/index/context/NexusIndexWriter.java
-index 038eaa8..8b34809 100644
---- a/indexer-core/src/main/java/org/apache/maven/index/context/NexusIndexWriter.java
-+++ b/indexer-core/src/main/java/org/apache/maven/index/context/NexusIndexWriter.java
-@@ -28,7 +28,6 @@ import org.apache.lucene.index.IndexWriterConfig;
- import org.apache.lucene.index.SerialMergeScheduler;
- import org.apache.lucene.store.Directory;
- import org.apache.lucene.store.LockObtainFailedException;
--import org.apache.lucene.util.Version;
- 
- /**
-  * An extension of <a
-@@ -43,7 +42,7 @@ public class NexusIndexWriter
-         throws CorruptIndexException, LockObtainFailedException, IOException
-     {
-         //super( directory, analyzer, create, MaxFieldLength.LIMITED );
--        this(directory, new IndexWriterConfig(Version.LUCENE_46, analyzer));
-+        this(directory, new IndexWriterConfig(analyzer));
- 
-         // setSimilarity( new NexusSimilarity() );
-     }
-@@ -58,7 +57,7 @@ public class NexusIndexWriter
- 
-     public static IndexWriterConfig defaultConfig()
-     {
--        final IndexWriterConfig config = new IndexWriterConfig( Version.LUCENE_46, new NexusAnalyzer() );
-+        final IndexWriterConfig config = new IndexWriterConfig( new NexusAnalyzer() );
-         // default open mode is CreateOrAppend which suits us
-         config.setRAMBufferSizeMB( 2.0 ); // old default
-         config.setMergeScheduler( new SerialMergeScheduler() ); // merging serially
-diff --git a/indexer-core/src/main/java/org/apache/maven/index/context/NexusLegacyAnalyzer.java b/indexer-core/src/main/java/org/apache/maven/index/context/NexusLegacyAnalyzer.java
-index c574ef6..305baa1 100644
---- a/indexer-core/src/main/java/org/apache/maven/index/context/NexusLegacyAnalyzer.java
-+++ b/indexer-core/src/main/java/org/apache/maven/index/context/NexusLegacyAnalyzer.java
-@@ -19,15 +19,11 @@ package org.apache.maven.index.context;
-  * under the License.
-  */
- 
--import java.io.IOException;
--import java.io.Reader;
- 
- import org.apache.lucene.analysis.Analyzer;
-+import org.apache.lucene.analysis.AnalyzerWrapper;
- import org.apache.lucene.analysis.util.CharTokenizer;
--import org.apache.lucene.analysis.TokenStream;
--import org.apache.lucene.analysis.Tokenizer;
- import org.apache.lucene.analysis.standard.StandardAnalyzer;
--import org.apache.lucene.util.Version;
- import org.apache.maven.index.ArtifactInfo;
- 
- /**
-@@ -38,29 +34,14 @@ import org.apache.maven.index.ArtifactInfo;
-  * @author Jason van Zyl
-  */
- public final class NexusLegacyAnalyzer
--    extends Analyzer
-+    extends AnalyzerWrapper
- {
--    private static final Analyzer DEFAULT_ANALYZER = new StandardAnalyzer( Version.LUCENE_46 );
--    
--    @Override
--    protected TokenStreamComponents createComponents(String fieldName, Reader reader)
--    {
--        try
--        {
--            return new TokenStreamComponents((Tokenizer) tokenizer(fieldName, reader));
--        }
--        catch (IOException ex)
--        {
--            throw new RuntimeException(ex);
--        }
--    }
--
--
--    protected TokenStream tokenizer( String field, final Reader reader ) throws IOException
--    {
--        if ( !isTextField( field ) )
-+    private static final Analyzer DEFAULT_ANALYZER = new StandardAnalyzer();
-+    private static final Analyzer LETTER_OR_DIGIT_ANALYZER = new Analyzer() {
-+        @Override
-+        protected TokenStreamComponents createComponents(final String fieldName)
-         {
--            return new CharTokenizer(Version.LUCENE_46, reader )
-+            return new TokenStreamComponents(new CharTokenizer()
-             {
-                 @Override
-                 protected boolean isTokenChar(int c )
-@@ -73,11 +54,24 @@ public final class NexusLegacyAnalyzer
-                 {
-                     return Character.toLowerCase( c );
-                 }
--            };
-+            });
-         }
--        else
-+    };
-+
-+    public NexusLegacyAnalyzer()
-+    {
-+        super(PER_FIELD_REUSE_STRATEGY);
-+    }
-+
-+    @Override
-+    protected Analyzer getWrappedAnalyzer(String fieldName)
-+    {
-+        if (!isTextField( fieldName ))
-         {
--            return DEFAULT_ANALYZER.tokenStream(field, reader );
-+            return LETTER_OR_DIGIT_ANALYZER;
-+        } else
-+        {
-+            return DEFAULT_ANALYZER;
-         }
-     }
- 
-@@ -87,6 +81,4 @@ public final class NexusLegacyAnalyzer
-             || ArtifactInfo.NAMES.equals( field );
- 
-     }
--
--    
- }
-diff --git a/indexer-core/src/main/java/org/apache/maven/index/context/TrackingLockFactory.java b/indexer-core/src/main/java/org/apache/maven/index/context/TrackingLockFactory.java
-new file mode 100644
-index 0000000..ead848b
---- /dev/null
-+++ b/indexer-core/src/main/java/org/apache/maven/index/context/TrackingLockFactory.java
-@@ -0,0 +1,94 @@
-+/*
-+ * Licensed to the Apache Software Foundation (ASF) under one
-+ * or more contributor license agreements.  See the NOTICE file
-+ * distributed with this work for additional information
-+ * regarding copyright ownership.  The ASF licenses this file
-+ * to you under the Apache License, Version 2.0 (the
-+ * "License"); you may not use this file except in compliance
-+ * with the License.  You may obtain a copy of the License at
-+ *
-+ *   http://www.apache.org/licenses/LICENSE-2.0    
-+ *
-+ * Unless required by applicable law or agreed to in writing,
-+ * software distributed under the License is distributed on an
-+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-+ * KIND, either express or implied.  See the License for the
-+ * specific language governing permissions and limitations
-+ * under the License.
-+ */
-+package org.apache.maven.index.context;
-+
-+import java.io.IOException;
-+import java.util.Collections;
-+import java.util.Set;
-+import java.util.concurrent.ConcurrentHashMap;
-+import org.apache.lucene.store.Directory;
-+import org.apache.lucene.store.Lock;
-+import org.apache.lucene.store.LockFactory;
-+import static com.google.common.base.Preconditions.checkNotNull;
-+import java.util.HashSet;
-+
-+/**
-+ *
-+ * @author Tomas Zezula
-+ */
-+final class TrackingLockFactory extends LockFactory {
-+
-+    private final LockFactory delegate;
-+    private final Set<TrackingLock> emittedLocks;
-+
-+    TrackingLockFactory(final LockFactory delegate) {
-+        this.delegate = checkNotNull(delegate);
-+        this.emittedLocks = Collections.newSetFromMap(new ConcurrentHashMap<TrackingLock,Boolean>());
-+    }
-+
-+    Set<? extends Lock> getEmittedLocks(String name) {
-+        final Set<Lock> result = new HashSet<>();
-+        for (TrackingLock lock : emittedLocks) {
-+            if (name == null || name.equals(lock.getName())) {
-+                result.add(lock);
-+            }
-+        }
-+        return result;
-+    }
-+
-+    @Override
-+    public Lock obtainLock(Directory dir, String lockName) throws IOException {
-+        final TrackingLock lck = new TrackingLock(
-+                delegate.obtainLock(dir, lockName),
-+                lockName);
-+        emittedLocks.add(lck);
-+        return lck;
-+    }
-+
-+
-+    private final class TrackingLock extends Lock {
-+        private final Lock delegate;
-+        private final String name;
-+
-+        TrackingLock(
-+                final Lock delegate,
-+                final String name) {
-+            this.delegate = checkNotNull(delegate);
-+            this.name = checkNotNull(name);
-+        }
-+
-+        String getName() {
-+            return name;
-+        }
-+
-+        @Override
-+        public void close() throws IOException {
-+            try {
-+                delegate.close();
-+            } finally {
-+                emittedLocks.remove(this);
-+            }
-+        }
-+
-+        @Override
-+        public void ensureValid() throws IOException {
-+            delegate.ensureValid();
-+        }
-+    }
-+}
-diff --git a/indexer-core/src/main/java/org/apache/maven/index/updater/DefaultIndexUpdater.java b/indexer-core/src/main/java/org/apache/maven/index/updater/DefaultIndexUpdater.java
-index 7f90ee1..06b2834 100644
---- a/indexer-core/src/main/java/org/apache/maven/index/updater/DefaultIndexUpdater.java
-+++ b/indexer-core/src/main/java/org/apache/maven/index/updater/DefaultIndexUpdater.java
-@@ -41,26 +41,16 @@ import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import java.util.Properties;
-+import java.util.Set;
- import java.util.TimeZone;
--import java.util.zip.ZipEntry;
--import java.util.zip.ZipInputStream;
- 
- import org.apache.lucene.document.Document;
--import org.apache.lucene.document.Field;
--import org.apache.lucene.document.StringField;
--import org.apache.lucene.index.CorruptIndexException;
-+import org.apache.lucene.index.DirectoryReader;
- import org.apache.lucene.index.IndexReader;
- import org.apache.lucene.index.IndexWriter;
--import org.apache.lucene.index.IndexableField;
- import org.apache.lucene.index.MultiFields;
- import org.apache.lucene.store.Directory;
--import org.apache.lucene.store.FSDirectory;
--import org.apache.lucene.store.IOContext;
--import org.apache.lucene.store.IndexOutput;
--import org.apache.lucene.store.LockObtainFailedException;
- import org.apache.lucene.util.Bits;
--import org.apache.maven.index.ArtifactInfo;
--import org.apache.maven.index.context.DefaultIndexingContext;
- import org.apache.maven.index.context.DocumentFilter;
- import org.apache.maven.index.context.IndexUtils;
- import org.apache.maven.index.context.IndexingContext;
-@@ -71,7 +61,6 @@ import org.apache.maven.index.fs.Locker;
- import org.apache.maven.index.incremental.IncrementalHandler;
- import org.apache.maven.index.updater.IndexDataReader.IndexDataReadResult;
- import org.codehaus.plexus.util.FileUtils;
--import org.codehaus.plexus.util.IOUtil;
- import org.codehaus.plexus.util.io.RawInputStreamFacade;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
-@@ -205,10 +194,14 @@ public class DefaultIndexUpdater
-         {
-             Date timestamp = null;
- 
-+            Set<String> rootGroups = null;
-+            Set<String> allGroups = null;
-             if ( remoteIndexFile.endsWith( ".gz" ) )
-             {
--                timestamp = unpackIndexData( is, directory, //
--                    updateRequest.getIndexingContext() );
-+                IndexDataReadResult result = unpackIndexData( is, directory, updateRequest.getIndexingContext() );
-+                timestamp = result.getTimestamp();
-+                rootGroups = result.getRootGroups();
-+                allGroups = result.getAllGroups();
-             }
-             else
-             {
-@@ -227,7 +220,7 @@ public class DefaultIndexUpdater
-             }
-             else
-             {
--                updateRequest.getIndexingContext().replace( directory );
-+                updateRequest.getIndexingContext().replace( directory, rootGroups, allGroups );
-             }
-             if ( sideEffects != null && sideEffects.size() > 0 )
-             {
-@@ -260,7 +253,7 @@ public class DefaultIndexUpdater
-         IndexWriter w = null;
-         try
-         {
--            r = IndexReader.open( directory );
-+            r = DirectoryReader.open( directory );
-             w = new NexusIndexWriter( directory, new NexusAnalyzer(), false );
-             
-             Bits liveDocs = MultiFields.getLiveDocs(r);
-@@ -296,7 +289,6 @@ public class DefaultIndexUpdater
-             // analyzer is unimportant, since we are not adding/searching to/on index, only reading/deleting
-             w = new NexusIndexWriter( directory, new NexusAnalyzer(), false );
- 
--            w.forceMerge(4);
-             w.commit();
-         }
-         finally
-@@ -381,7 +373,7 @@ public class DefaultIndexUpdater
-      * @param w a writer to save index data
-      * @param ics a collection of index creators for updating unpacked documents.
-      */
--    public static Date unpackIndexData( final InputStream is, final Directory d, final IndexingContext context )
-+    public static IndexDataReadResult unpackIndexData( final InputStream is, final Directory d, final IndexingContext context )
-         throws IOException
-     {
-         NexusIndexWriter w = new NexusIndexWriter( d, new NexusAnalyzer(), true );
-@@ -389,9 +381,7 @@ public class DefaultIndexUpdater
-         {
-             IndexDataReader dr = new IndexDataReader( is );
- 
--            IndexDataReadResult result = dr.readIndex( w, context );
--
--            return result.getTimestamp();
-+            return dr.readIndex( w, context );
-         }
-         finally
-         {
-diff --git a/indexer-core/src/main/java/org/apache/maven/index/updater/FSDirectoryFactory.java b/indexer-core/src/main/java/org/apache/maven/index/updater/FSDirectoryFactory.java
-index aa739ae..9866bbf 100644
---- a/indexer-core/src/main/java/org/apache/maven/index/updater/FSDirectoryFactory.java
-+++ b/indexer-core/src/main/java/org/apache/maven/index/updater/FSDirectoryFactory.java
-@@ -40,7 +40,7 @@ public interface FSDirectoryFactory
-         public FSDirectory open( File indexDir )
-             throws IOException
-         {
--            return FSDirectory.open( indexDir );
-+            return FSDirectory.open( indexDir.toPath() );
-         }
-     };
- 
-diff --git a/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataReader.java b/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataReader.java
-index f76200c..3ece76a 100644
---- a/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataReader.java
-+++ b/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataReader.java
-@@ -30,6 +30,8 @@ import java.util.Date;
- import java.util.zip.GZIPInputStream;
- 
- import com.google.common.base.Strings;
-+import java.util.LinkedHashSet;
-+import java.util.Set;
- import org.apache.lucene.document.Document;
- import org.apache.lucene.document.Field;
- import org.apache.lucene.document.Field.Index;
-@@ -51,27 +53,26 @@ public class IndexDataReader
-     public IndexDataReader( InputStream is )
-         throws IOException
-     {
--        BufferedInputStream bis = new BufferedInputStream( is, 1024 * 8 );
--
-         // MINDEXER-13
-         // LightweightHttpWagon may have performed automatic decompression
-         // Handle it transparently
--        bis.mark( 2 );
-+        is.mark( 2 );
-         InputStream data;
--        if ( bis.read() == 0x1f && bis.read() == 0x8b ) // GZIPInputStream.GZIP_MAGIC
-+        if ( is.read() == 0x1f && is.read() == 0x8b ) // GZIPInputStream.GZIP_MAGIC
-         {
--            bis.reset();
--            data = new GZIPInputStream( bis, 2 * 1024 );
-+            is.reset();
-+            data = new BufferedInputStream(new GZIPInputStream( is, 1024 * 8 ), 1024 * 8 );
-         }
-         else
-         {
-+            BufferedInputStream bis = new BufferedInputStream( is, 1024 * 8 );
-             bis.reset();
-             data = bis;
-         }
- 
-         this.dis = new DataInputStream( data );
-     }
--
-+    
-     public IndexDataReadResult readIndex( IndexWriter w, IndexingContext context )
-         throws IOException
-     {
-@@ -89,21 +90,32 @@ public class IndexDataReader
-         int n = 0;
- 
-         Document doc;
-+        Set<String> rootGroups = new LinkedHashSet<>();
-+        Set<String> allGroups = new LinkedHashSet<>();
-+        
-         while ( ( doc = readDocument() ) != null )
-         {
--            w.addDocument( IndexUtils.updateDocument( doc, context, false ) );
-+            ArtifactInfo ai = IndexUtils.constructArtifactInfo( doc, context );
-+            if(ai != null) {
-+                w.addDocument( IndexUtils.updateDocument( doc, context, false, ai ) );
-+
-+                rootGroups.add( ai.getRootGroup() );
-+                allGroups.add( ai.getGroupId() );
- 
-+            } else {
-+                w.addDocument( doc );
-+            }
-             n++;
-         }
- 
-         w.commit();
--        
--        w.forceMerge(1);
--        w.commit();
- 
-         IndexDataReadResult result = new IndexDataReadResult();
-         result.setDocumentCount( n );
-         result.setTimestamp( date );
-+        result.setRootGroups( rootGroups );
-+        result.setAllGroups( allGroups );
-+        
-         return result;
-     }
- 
-@@ -292,6 +304,10 @@ public class IndexDataReader
- 
-         private int documentCount;
- 
-+        private Set<String> rootGroups;
-+
-+        private Set<String> allGroups;
-+        
-         public void setDocumentCount( int documentCount )
-         {
-             this.documentCount = documentCount;
-@@ -312,6 +328,26 @@ public class IndexDataReader
-             return timestamp;
-         }
- 
-+        public void setRootGroups(Set<String> rootGroups)
-+        {
-+            this.rootGroups = rootGroups;
-+        }
-+
-+        public Set<String> getRootGroups()
-+        {
-+            return rootGroups;
-+        }
-+
-+        public void setAllGroups(Set<String> allGroups)
-+        {
-+            this.allGroups = allGroups;
-+        }
-+
-+        public Set<String> getAllGroups()
-+        {
-+            return allGroups;
-+        }
-+
-     }
- 
-     /**
-diff --git a/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataWriter.java b/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataWriter.java
-index 13ad7ce..5d9e338 100644
---- a/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataWriter.java
-+++ b/indexer-core/src/main/java/org/apache/maven/index/updater/IndexDataWriter.java
-@@ -34,6 +34,7 @@ import org.apache.lucene.document.Document;
- import org.apache.lucene.document.Field;
- import org.apache.lucene.document.Field.Store;
- import org.apache.lucene.document.StringField;
-+import org.apache.lucene.index.IndexOptions;
- import org.apache.lucene.index.IndexReader;
- import org.apache.lucene.index.IndexableField;
- import org.apache.lucene.index.MultiFields;
-@@ -242,7 +243,7 @@ public class IndexDataWriter
-     public void writeField( IndexableField field )
-         throws IOException
-     {
--        int flags = ( field.fieldType().indexed() ? F_INDEXED : 0 ) //
-+        int flags = ( field.fieldType().indexOptions() != IndexOptions.NONE  ? F_INDEXED : 0 ) //
-             + ( field.fieldType().tokenized() ? F_TOKENIZED : 0 ) //
-             + ( field.fieldType().stored() ? F_STORED : 0 ); //
-         // + ( false ? F_COMPRESSED : 0 ); // Compressed not supported anymore
-diff --git a/indexer-core/src/test/java/org/apache/maven/index/DefaultIndexNexusIndexerTest.java b/indexer-core/src/test/java/org/apache/maven/index/DefaultIndexNexusIndexerTest.java
-index 99f6183..195b472 100644
---- a/indexer-core/src/test/java/org/apache/maven/index/DefaultIndexNexusIndexerTest.java
-+++ b/indexer-core/src/test/java/org/apache/maven/index/DefaultIndexNexusIndexerTest.java
-@@ -181,7 +181,7 @@ public class DefaultIndexNexusIndexerTest
- 
-         File newIndex = new File( getBasedir(), "target/test-new" );
- 
--        Directory newIndexDir = FSDirectory.open( newIndex );
-+        Directory newIndexDir = FSDirectory.open( newIndex.toPath() );
- 
-         IndexingContext newContext =
-             nexusIndexer.addIndexingContext( "test-new", "test", null, newIndexDir, null, null, DEFAULT_CREATORS );
-@@ -223,7 +223,7 @@ public class DefaultIndexNexusIndexerTest
- 
-         newContext.close( false );
- 
--        newIndexDir = FSDirectory.open( newIndex );
-+        newIndexDir = FSDirectory.open( newIndex.toPath());
- 
-         newContext =
-             nexusIndexer.addIndexingContext( "test-new", "test", null, newIndexDir, null, null, DEFAULT_CREATORS );
-diff --git a/indexer-core/src/test/java/org/apache/maven/index/FSDirectoryDeleteTest.java b/indexer-core/src/test/java/org/apache/maven/index/FSDirectoryDeleteTest.java
-index 0912334..5a541ca 100644
---- a/indexer-core/src/test/java/org/apache/maven/index/FSDirectoryDeleteTest.java
-+++ b/indexer-core/src/test/java/org/apache/maven/index/FSDirectoryDeleteTest.java
-@@ -53,13 +53,13 @@ public class FSDirectoryDeleteTest
- 
-         nexusIndexer = lookup( NexusIndexer.class );
- 
--        indexDir = FSDirectory.open( indexDirFile );
-+        indexDir = FSDirectory.open( indexDirFile.toPath() );
- 
-         context = nexusIndexer.addIndexingContext( "one", "nexus-13", repo, indexDir, null, null, DEFAULT_CREATORS );
- 
-         nexusIndexer.scan( context );
- 
--        otherIndexDir = FSDirectory.open( otherIndexDirFile );
-+        otherIndexDir = FSDirectory.open( otherIndexDirFile.toPath() );
- 
-         otherContext =
-             nexusIndexer.addIndexingContext( "other", "nexus-13", repo, otherIndexDir, null, null, DEFAULT_CREATORS );
-diff --git a/indexer-core/src/test/java/org/apache/maven/index/FullIndexNexusIndexerTest.java b/indexer-core/src/test/java/org/apache/maven/index/FullIndexNexusIndexerTest.java
-index dc07273..3d006ff 100644
---- a/indexer-core/src/test/java/org/apache/maven/index/FullIndexNexusIndexerTest.java
-+++ b/indexer-core/src/test/java/org/apache/maven/index/FullIndexNexusIndexerTest.java
-@@ -356,7 +356,7 @@ public class FullIndexNexusIndexerTest
- 
-         File newIndex = new File( getBasedir(), "target/test-new" );
- 
--        Directory newIndexDir = FSDirectory.open( newIndex );
-+        Directory newIndexDir = FSDirectory.open( newIndex.toPath() );
- 
-         IndexingContext newContext =
-             nexusIndexer.addIndexingContext( "test-new", "test", null, newIndexDir, null, null, DEFAULT_CREATORS );
-@@ -397,7 +397,7 @@ public class FullIndexNexusIndexerTest
- 
-         newContext.close( false );
- 
--        newIndexDir = FSDirectory.open( newIndex );
-+        newIndexDir = FSDirectory.open( newIndex.toPath() );
- 
-         newContext =
-             nexusIndexer.addIndexingContext( "test-new", "test", null, newIndexDir, null, null, DEFAULT_CREATORS );
-diff --git a/indexer-core/src/test/java/org/apache/maven/index/NexusIndexerTest.java b/indexer-core/src/test/java/org/apache/maven/index/NexusIndexerTest.java
-index 4af552c..98dbd9b 100644
---- a/indexer-core/src/test/java/org/apache/maven/index/NexusIndexerTest.java
-+++ b/indexer-core/src/test/java/org/apache/maven/index/NexusIndexerTest.java
-@@ -118,13 +118,13 @@ public class NexusIndexerTest
-         // scored search against field having untokenized indexerField only
-         q = indexer.constructQuery( MAVEN.PACKAGING, "maven-archetype", SearchType.SCORED );
- 
--        assertEquals( "p:maven-archetype p:maven-archetype*^0.8", q.toString() );
-+        assertEquals( "p:maven-archetype p:maven-archetype*", q.toString() );
- 
-         // scored search against field having untokenized indexerField only
-         q = indexer.constructQuery( MAVEN.ARTIFACT_ID, "commons-logging", SearchType.SCORED );
- 
-         assertEquals(
--            "(a:commons-logging a:commons-logging*^0.8) ((+artifactId:commons +artifactId:logging*) artifactId:\"commons logging\")",
-+            "(a:commons-logging a:commons-logging*) ((+artifactId:commons +artifactId:logging*) artifactId:\"commons logging\")",
-             q.toString() );
- 
-         // scored search against field having tokenized IndexerField only (should be impossible).
-diff --git a/indexer-core/src/test/java/org/apache/maven/index/archetype/NexusArchetypeDataSourceTest.java b/indexer-core/src/test/java/org/apache/maven/index/archetype/NexusArchetypeDataSourceTest.java
-index 1818d3c..4164f3a 100644
---- a/indexer-core/src/test/java/org/apache/maven/index/archetype/NexusArchetypeDataSourceTest.java
-+++ b/indexer-core/src/test/java/org/apache/maven/index/archetype/NexusArchetypeDataSourceTest.java
-@@ -70,7 +70,7 @@ public class NexusArchetypeDataSourceTest
- 
-             super.deleteDirectory( indexDirFile );
- 
--            indexDir = FSDirectory.open( indexDirFile );
-+            indexDir = FSDirectory.open( indexDirFile.toPath() );
-         }
- 
-         File repo = new File( getBasedir(), "src/test/repo" );
-diff --git a/indexer-core/src/test/java/org/apache/maven/index/context/NexusAnalyzerTest.java b/indexer-core/src/test/java/org/apache/maven/index/context/NexusAnalyzerTest.java
-index ba78251..a7c71b0 100644
---- a/indexer-core/src/test/java/org/apache/maven/index/context/NexusAnalyzerTest.java
-+++ b/indexer-core/src/test/java/org/apache/maven/index/context/NexusAnalyzerTest.java
-@@ -55,7 +55,7 @@ public class NexusAnalyzerTest
-     protected void runAndCompare( IndexerField indexerField, String text, String[] expected )
-         throws IOException
-     {
--        Tokenizer ts = (Tokenizer) nexusAnalyzer.createComponents(indexerField.getKey(), new StringReader( text ) ).getTokenizer();
-+        Tokenizer ts = (Tokenizer) nexusAnalyzer.tokenStream(indexerField.getKey(), new StringReader( text ) );
-         ts.reset();
- 
-         ArrayList<String> tokenList = new ArrayList<String>();
-diff --git a/indexer-core/src/test/java/org/apache/maven/index/context/TrackingLockFactoryTest.java b/indexer-core/src/test/java/org/apache/maven/index/context/TrackingLockFactoryTest.java
-new file mode 100644
-index 0000000..5590f6c
---- /dev/null
-+++ b/indexer-core/src/test/java/org/apache/maven/index/context/TrackingLockFactoryTest.java
-@@ -0,0 +1,84 @@
-+/*
-+ * Licensed to the Apache Software Foundation (ASF) under one
-+ * or more contributor license agreements.  See the NOTICE file
-+ * distributed with this work for additional information
-+ * regarding copyright ownership.  The ASF licenses this file
-+ * to you under the Apache License, Version 2.0 (the
-+ * "License"); you may not use this file except in compliance
-+ * with the License.  You may obtain a copy of the License at
-+ *
-+ *   http://www.apache.org/licenses/LICENSE-2.0    
-+ *
-+ * Unless required by applicable law or agreed to in writing,
-+ * software distributed under the License is distributed on an
-+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-+ * KIND, either express or implied.  See the License for the
-+ * specific language governing permissions and limitations
-+ * under the License.
-+ */
-+package org.apache.maven.index.context;
-+
-+import java.io.IOException;
-+import java.util.Set;
-+import org.apache.lucene.store.Lock;
-+import org.apache.lucene.store.LockObtainFailedException;
-+import org.apache.lucene.store.RAMDirectory;
-+import org.apache.lucene.store.SingleInstanceLockFactory;
-+import org.junit.Test;
-+import static org.junit.Assert.*;
-+
-+/**
-+ *
-+ * @author Tomas Zezula
-+ */
-+public class TrackingLockFactoryTest {
-+
-+    public TrackingLockFactoryTest() {
-+    }
-+
-+    @Test
-+    public void testLockUnlock() throws IOException {
-+        final TrackingLockFactory lf = new TrackingLockFactory(new SingleInstanceLockFactory());
-+        final RAMDirectory ram = new RAMDirectory(lf);
-+        final Lock foo = ram.obtainLock("foo");
-+        final Lock bar = ram.obtainLock("bar");
-+        bar.close();
-+        foo.close();
-+        ram.close();
-+    }
-+
-+    @Test
-+    public void testLockLocked() throws IOException {
-+        final TrackingLockFactory lf = new TrackingLockFactory(new SingleInstanceLockFactory());
-+        final RAMDirectory ram = new RAMDirectory(lf);
-+        final Lock foo = ram.obtainLock("foo");
-+        boolean thrownLOFE = false;
-+        try {
-+            ram.obtainLock("foo");
-+        } catch (LockObtainFailedException e) {
-+            thrownLOFE = true;
-+        }
-+        assertTrue(thrownLOFE);
-+        foo.close();
-+        final Lock foo2 = ram.obtainLock("foo");
-+        foo2.close();
-+        ram.close();
-+    }
-+
-+    @Test
-+    public void testEmmittedLocks() throws IOException {
-+        final TrackingLockFactory lf = new TrackingLockFactory(new SingleInstanceLockFactory());
-+        final RAMDirectory ram = new RAMDirectory(lf);
-+        final Lock l1 = ram.obtainLock("l1");
-+        final Lock l2 = ram.obtainLock("l2");
-+        final Lock l3 = ram.obtainLock("l3");
-+        l2.close();
-+        Set<? extends Lock> emittedLocks = lf.getEmittedLocks(null);
-+        assertEquals(2, emittedLocks.size());
-+        assertTrue(emittedLocks.contains(l1));
-+        assertTrue(emittedLocks.contains(l3));
-+        emittedLocks = lf.getEmittedLocks("l3");
-+        assertEquals(1, emittedLocks.size());
-+        assertTrue(emittedLocks.contains(l3));
-+    }
-+}
-diff --git a/indexer-core/src/test/java/org/apache/maven/index/packer/NEXUS4149TransferFormatTest.java b/indexer-core/src/test/java/org/apache/maven/index/packer/NEXUS4149TransferFormatTest.java
-index 8d6b378..b77d6b0 100644
---- a/indexer-core/src/test/java/org/apache/maven/index/packer/NEXUS4149TransferFormatTest.java
-+++ b/indexer-core/src/test/java/org/apache/maven/index/packer/NEXUS4149TransferFormatTest.java
-@@ -19,9 +19,11 @@ package org.apache.maven.index.packer;
-  * under the License.
-  */
- 
-+import java.io.BufferedInputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
-+import java.io.InputStream;
- import java.util.Arrays;
- import java.util.List;
- 
-@@ -140,7 +142,7 @@ public class NEXUS4149TransferFormatTest
-         }
- 
-         // read it up and verify, but stay "low level", directly consume the GZ file and count
--        FileInputStream fis = new FileInputStream( new File( packTargetDir, "nexus-maven-repository-index.gz" ) );
-+        InputStream fis = new BufferedInputStream( new FileInputStream( new File( packTargetDir, "nexus-maven-repository-index.gz" ) ) );
-         IndexDataReader reader = new IndexDataReader( fis );
-         try
-         {
-diff --git a/indexer-core/src/test/java/org/apache/maven/index/updater/DefaultIndexUpdaterTest.java b/indexer-core/src/test/java/org/apache/maven/index/updater/DefaultIndexUpdaterTest.java
-index cdf6d71..2b89320 100644
---- a/indexer-core/src/test/java/org/apache/maven/index/updater/DefaultIndexUpdaterTest.java
-+++ b/indexer-core/src/test/java/org/apache/maven/index/updater/DefaultIndexUpdaterTest.java
-@@ -150,7 +150,11 @@ public class DefaultIndexUpdaterTest
-             Collection<ArtifactInfo> tempContent = tempResponse.getResults();
-             assertEquals( tempContent.toString(), 3, tempContent.size() );
- 
--            RAMDirectory tempDir2 = new RAMDirectory( tempContext.getIndexDirectory(), IOContext.DEFAULT );
-+            RAMDirectory tempDir2 = new RAMDirectory();
-+            for (String file : tempContext.getIndexDirectory().listAll())
-+            {
-+                tempDir2.copyFrom(tempContext.getIndexDirectory(), file, file, IOContext.DEFAULT);
-+            }
- 
-             indexer.removeIndexingContext( tempContext, false );
- 
-@@ -193,7 +197,11 @@ public class DefaultIndexUpdaterTest
-             indexer.deleteArtifactFromIndex(
-                 createArtifactContext( repositoryId, "commons-lang", "commons-lang", "2.4", null ), tempContext );
- 
--            RAMDirectory tempDir2 = new RAMDirectory( tempContext.getIndexDirectory(), IOContext.DEFAULT );
-+            RAMDirectory tempDir2 = new RAMDirectory();
-+            for (String file : tempContext.getIndexDirectory().listAll())
-+            {
-+                tempDir2.copyFrom(tempContext.getIndexDirectory(), file, file, IOContext.DEFAULT);
-+            }
- 
-             indexer.removeIndexingContext( tempContext, false );
- 
-@@ -267,7 +275,11 @@ public class DefaultIndexUpdaterTest
-             indexer.addArtifactToIndex(
-                 createArtifactContext( repositoryId, "org.slf4j.foo", "jcl104-over-slf4j", "1.4.2", null ), context );
- 
--            RAMDirectory tempDir2 = new RAMDirectory( tempContext.getIndexDirectory(), IOContext.DEFAULT );
-+            RAMDirectory tempDir2 = new RAMDirectory();
-+            for (String file : tempContext.getIndexDirectory().listAll())
-+            {
-+                tempDir2.copyFrom(tempContext.getIndexDirectory(), file, file, IOContext.DEFAULT);
-+            }
- 
-             indexer.removeIndexingContext( tempContext, false );
- 
-@@ -408,7 +420,7 @@ public class DefaultIndexUpdaterTest
-                     with( IndexingContext.INDEX_FILE_PREFIX + ".gz" ) );
-                 will( returnValue( newInputStream( "/index-updater/server-root/nexus-maven-repository-index.gz" ) ) );
- 
--                oneOf( tempContext ).replace( with( any( Directory.class ) ) );
-+                oneOf( tempContext ).replace( with( any( Directory.class ) ), with( any( Set.class ) ), with( any( Set.class ) ) );
- 
-                 oneOf( mockFetcher ).disconnect();
-             }
-@@ -566,7 +578,7 @@ public class DefaultIndexUpdaterTest
-                 will( returnValue( newInputStream( "/index-updater/server-root/nexus-maven-repository-index.gz" ) ) );
-                 // could create index archive there and verify that it is merged correctly
- 
--                oneOf( tempContext ).replace( with( any( Directory.class ) ) );
-+                oneOf( tempContext ).replace( with( any( Directory.class ) ), with( any( Set.class ) ), with( any( Set.class ) ) );
- 
-                 never( mockFetcher ).retrieve( //
-                     with( IndexingContext.INDEX_FILE_PREFIX + ".2.gz" ) );
-@@ -810,7 +822,7 @@ public class DefaultIndexUpdaterTest
- 
-                 never( tempContext ).merge( with( any( Directory.class ) ) );
- 
--                oneOf( tempContext ).replace( with( any( Directory.class ) ) );
-+                oneOf( tempContext ).replace( with( any( Directory.class ) ), with( any( Set.class ) ), with( any( Set.class ) ) );
- 
-                 oneOf( mockFetcher ).disconnect();
-             }
-@@ -970,4 +982,4 @@ public class DefaultIndexUpdaterTest
-     {
-         assertFalse("Index update should have failed, but says it succeeded", updateResult.isSuccessful());
-     }
--}
-\ No newline at end of file
-+}
-diff --git a/indexer-core/src/test/java/org/apache/maven/index/updater/IndexDataTest.java b/indexer-core/src/test/java/org/apache/maven/index/updater/IndexDataTest.java
-index 91db7f2..65b6b8c 100644
---- a/indexer-core/src/test/java/org/apache/maven/index/updater/IndexDataTest.java
-+++ b/indexer-core/src/test/java/org/apache/maven/index/updater/IndexDataTest.java
-@@ -29,6 +29,7 @@ import java.util.Map.Entry;
- 
- import org.apache.lucene.document.Document;
- import org.apache.lucene.index.CorruptIndexException;
-+import org.apache.lucene.index.DirectoryReader;
- import org.apache.lucene.index.IndexReader;
- import org.apache.lucene.search.IndexSearcher;
- import org.apache.lucene.store.Directory;
-@@ -83,7 +84,7 @@ public class IndexDataTest
- 
-         newDir = new RAMDirectory();
- 
--        Date newTimestamp = DefaultIndexUpdater.unpackIndexData( is, newDir, context );
-+        Date newTimestamp = DefaultIndexUpdater.unpackIndexData( is, newDir, context ).getTimestamp();
- 
-         assertEquals( timestamp, newTimestamp );
- 
-@@ -120,7 +121,7 @@ public class IndexDataTest
- 
-         newDir = new RAMDirectory();
- 
--        Date newTimestamp = DefaultIndexUpdater.unpackIndexData( is, newDir, context );
-+        Date newTimestamp = DefaultIndexUpdater.unpackIndexData( is, newDir, context ).getTimestamp();
- 
-         assertEquals( null, newTimestamp );
- 
-@@ -134,7 +135,7 @@ public class IndexDataTest
- 
-         Map<String, ArtifactInfo> r1map = readIndex( r1 );
- 
--        IndexReader r2 = IndexReader.open( newDir );
-+        IndexReader r2 = DirectoryReader.open( newDir );
- 
-         Map<String, ArtifactInfo> r2map = readIndex( r2 );
- 
-diff --git a/indexer-core/src/test/resources/testQueryCreatorNGSearch/case01.txt b/indexer-core/src/test/resources/testQueryCreatorNGSearch/case01.txt
-index 17691d9..ece9199 100644
---- a/indexer-core/src/test/resources/testQueryCreatorNGSearch/case01.txt
-+++ b/indexer-core/src/test/resources/testQueryCreatorNGSearch/case01.txt
-@@ -1,4 +1,4 @@
--### Searched for field urn:maven#groupId (with 2 registered index fields) using query "commons-logg" (QC create LQL "(g:commons-logg g:commons-logg*^0.8) ((+groupId:commons +groupId:logg*) groupId:"commons logg")")
-+### Searched for field urn:maven#groupId (with 2 registered index fields) using query "commons-logg" (QC create LQL "(g:commons-logg g:commons-logg*) ((+groupId:commons +groupId:logg*) groupId:"commons logg")")
- test :: commons-logging:commons-logging:1.1:null:jar
- test :: commons-logging:commons-logging:1.1:sources:jar
- test :: commons-logging:commons-logging:1.0.4:null:jar
-diff --git a/indexer-core/src/test/resources/testQueryCreatorNGSearch/case05.txt b/indexer-core/src/test/resources/testQueryCreatorNGSearch/case05.txt
-index bd52ac6..511516e 100644
---- a/indexer-core/src/test/resources/testQueryCreatorNGSearch/case05.txt
-+++ b/indexer-core/src/test/resources/testQueryCreatorNGSearch/case05.txt
-@@ -1,4 +1,4 @@
--### Searched for field urn:maven#version (with 2 registered index fields) using query "1.0" (QC create LQL "(v:1.0 v:1.0*^0.8) ((+version:1 +version:0*) version:"1 0")")
-+### Searched for field urn:maven#version (with 2 registered index fields) using query "1.0" (QC create LQL "(v:1.0 v:1.0*) ((+version:1 +version:0*) version:"1 0")")
- test :: proptest:proptest-archetype:1.0:null:maven-archetype
- test :: org.apache.maven.plugins:maven-core-it-plugin:1.0:null:maven-plugin
- test :: org.apache.maven.plugins:maven-core-it-plugin:1.0:sources:jar
-diff --git a/indexer-examples/indexer-examples-spring/src/main/java/org/apache/maven/indexer/examples/indexing/RepositoryIndexer.java b/indexer-examples/indexer-examples-spring/src/main/java/org/apache/maven/indexer/examples/indexing/RepositoryIndexer.java
-index a205288..88f9a27 100644
---- a/indexer-examples/indexer-examples-spring/src/main/java/org/apache/maven/indexer/examples/indexing/RepositoryIndexer.java
-+++ b/indexer-examples/indexer-examples-spring/src/main/java/org/apache/maven/indexer/examples/indexing/RepositoryIndexer.java
-@@ -61,11 +61,9 @@ public class RepositoryIndexer
- 
-     private static final Logger LOGGER = LoggerFactory.getLogger( RepositoryIndexer.class );
- 
--    private static final Version luceneVersion = Version.LUCENE_48;
--
-     private static final String[] luceneFields = new String[]{ "g", "a", "v", "p", "c" };
- 
--    private static final WhitespaceAnalyzer luceneAnalyzer = new WhitespaceAnalyzer( luceneVersion );
-+    private static final WhitespaceAnalyzer luceneAnalyzer = new WhitespaceAnalyzer( );
- 
-     private Indexer indexer;
- 
-@@ -176,7 +174,7 @@ public class RepositoryIndexer
-     public Set<ArtifactInfo> search( final String queryText )
-         throws ParseException, IOException
-     {
--        final Query query = new MultiFieldQueryParser( luceneVersion, luceneFields, luceneAnalyzer ).parse( queryText );
-+        final Query query = new MultiFieldQueryParser( luceneFields, luceneAnalyzer ).parse( queryText );
- 
-         LOGGER.debug( "Executing search query: {}; ctx id: {}; idx dir: {}",
-                       new String[]{ query.toString(), indexingContext.getId(),
-diff --git a/pom.xml b/pom.xml
-index e60ccd1..a844429 100644
---- a/pom.xml
-+++ b/pom.xml
-@@ -90,7 +90,7 @@ under the License.
-     <eclipse-sisu.version>0.2.1</eclipse-sisu.version>
-     <sisu-guice.version>3.2.2</sisu-guice.version>
- 
--    <lucene.version>4.8.1</lucene.version>
-+    <lucene.version>5.5.3</lucene.version>
-     <maven.version>3.0.5</maven.version>
-     <aether.version>1.0.0.v20140518</aether.version>
- 
diff --git a/maven.indexer/nbproject/project.properties b/maven.indexer/nbproject/project.properties
index 2d7725a29..068212a58 100644
--- a/maven.indexer/nbproject/project.properties
+++ b/maven.indexer/nbproject/project.properties
@@ -19,11 +19,11 @@ test.config.stableBTD.includes=**/*Test.class
 is.autoload=true
 javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
-release.external/indexer-core-6.0-SNAPSHOT-patched.jar=modules/ext/maven/indexer-core-6.0-SNAPSHOT-patched.jar
-release.external/lucene-core-5.5.3.jar=modules/ext/maven/lucene-core-5.5.3.jar
-release.external/lucene-highlighter-5.5.3.jar=modules/ext/maven/lucene-highlighter-5.5.3.jar
-release.external/lucene-queryparser-5.5.3.jar=modules/ext/maven/lucene-queryparser-5.5.3.jar
-release.external/lucene-analyzers-common-5.5.3.jar=modules/ext/maven/lucene-analyzers-common-5.5.3.jar
+release.external/indexer-core-6.0.0.jar=modules/ext/maven/indexer-core-6.0.0.jar
+release.external/lucene-core-5.5.5.jar=modules/ext/maven/lucene-core-5.5.5.jar
+release.external/lucene-highlighter-5.5.5.jar=modules/ext/maven/lucene-highlighter-5.5.5.jar
+release.external/lucene-queryparser-5.5.5.jar=modules/ext/maven/lucene-queryparser-5.5.5.jar
+release.external/lucene-analyzers-common-5.5.5.jar=modules/ext/maven/lucene-analyzers-common-5.5.5.jar
 release.external/javax.annotation-api-1.2.jar=modules/ext/maven/javax.annotation-api-1.2.jar
 # XXX so long as Lucene is bundled here:
 sigtest.gen.fail.on.error=false
diff --git a/maven.indexer/nbproject/project.xml b/maven.indexer/nbproject/project.xml
index 98b2b0573..a61977e5b 100644
--- a/maven.indexer/nbproject/project.xml
+++ b/maven.indexer/nbproject/project.xml
@@ -166,24 +166,24 @@
                 <package>org.netbeans.modules.maven.indexer.spi.impl</package>
             </friend-packages>
             <class-path-extension>
-                <runtime-relative-path>ext/maven/indexer-core-6.0-SNAPSHOT-patched.jar</runtime-relative-path>
-                <binary-origin>external/indexer-core-6.0-SNAPSHOT-patched.jar</binary-origin>
+                <runtime-relative-path>ext/maven/indexer-core-6.0.0.jar</runtime-relative-path>
+                <binary-origin>external/indexer-core-6.0.0.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/maven/lucene-core-5.5.3.jar</runtime-relative-path>
-                <binary-origin>external/lucene-core-5.5.3.jar</binary-origin>
+                <runtime-relative-path>ext/maven/lucene-core-5.5.5.jar</runtime-relative-path>
+                <binary-origin>external/lucene-core-5.5.5.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/maven/lucene-highlighter-5.5.3.jar</runtime-relative-path>
-                <binary-origin>external/lucene-highlighter-5.5.3.jar</binary-origin>
+                <runtime-relative-path>ext/maven/lucene-highlighter-5.5.5.jar</runtime-relative-path>
+                <binary-origin>external/lucene-highlighter-5.5.5.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/maven/lucene-queryparser-5.5.3.jar</runtime-relative-path>
-                <binary-origin>external/lucene-queryparser-5.5.3.jar</binary-origin>
+                <runtime-relative-path>ext/maven/lucene-queryparser-5.5.5.jar</runtime-relative-path>
+                <binary-origin>external/lucene-queryparser-5.5.5.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
-                <runtime-relative-path>ext/maven/lucene-analyzers-common-5.5.3.jar</runtime-relative-path>
-                <binary-origin>external/lucene-analyzers-common-5.5.3.jar</binary-origin>
+                <runtime-relative-path>ext/maven/lucene-analyzers-common-5.5.5.jar</runtime-relative-path>
+                <binary-origin>external/lucene-analyzers-common-5.5.5.jar</binary-origin>
             </class-path-extension>
             <class-path-extension>
                 <runtime-relative-path>ext/maven/javax.annotation-api-1.2.jar</runtime-relative-path>
diff --git a/nbbuild/licenses/Apache-2.0+MIT+testng b/nbbuild/licenses/Apache-2.0+MIT+testng
new file mode 100644
index 000000000..17898e015
--- /dev/null
+++ b/nbbuild/licenses/Apache-2.0+MIT+testng
@@ -0,0 +1,236 @@
+Parts of this work are licensed:
+
+The MIT License (MIT)
+
+Copyright 2011, John Resig
+Dual licensed under the MIT or GPL Version 2 licenses.
+http://jquery.org/license
+
+Includes Sizzle.js
+http://sizzlejs.com/
+Copyright 2011, The Dojo Foundation
+Released under the MIT, BSD, and GPL Licenses.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+Parts of this work are licensed:
+
+                                Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
diff --git a/nbbuild/licenses/Apache-2.0+MIT-Bindex b/nbbuild/licenses/Apache-2.0+MIT-Bindex
new file mode 100644
index 000000000..3148ca712
--- /dev/null
+++ b/nbbuild/licenses/Apache-2.0+MIT-Bindex
@@ -0,0 +1,226 @@
+Parts of this work are licensed:
+
+Copyright (c) 2002,2003, Stefan Haustein, Oberhausen, Rhld., Germany
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The  above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+
+
+Parts of this work are licensed:
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@netbeans.apache.org
For additional commands, e-mail: notifications-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists