mirror of https://github.com/apache/archiva.git
a little hackhish but fix use with tomcat maven plugin, sisu need a URLClassLoader as TCL to be able to use lookupList
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1158272 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
5c5c959a14
commit
c7607a63e5
|
@ -19,13 +19,7 @@ package org.apache.archiva.consumers.lucene;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.archiva.common.plexusbridge.MavenIndexerUtils;
|
||||
import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
|
||||
import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;
|
||||
import org.apache.archiva.scheduler.ArchivaTaskScheduler;
|
||||
|
@ -49,6 +43,13 @@ import org.codehaus.plexus.taskqueue.TaskQueueException;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Consumer for indexing the repository to provide search and IDE integration features.
|
||||
*/
|
||||
|
@ -77,14 +78,15 @@ public class NexusIndexerConsumer
|
|||
private List<IndexCreator> allIndexCreators;
|
||||
|
||||
public NexusIndexerConsumer( ArchivaTaskScheduler<ArtifactIndexingTask> scheduler,
|
||||
ArchivaConfiguration configuration, FileTypes filetypes, PlexusSisuBridge plexusSisuBridge )
|
||||
ArchivaConfiguration configuration, FileTypes filetypes,
|
||||
PlexusSisuBridge plexusSisuBridge, MavenIndexerUtils mavenIndexerUtils )
|
||||
throws PlexusSisuBridgeException
|
||||
{
|
||||
this.configuration = configuration;
|
||||
this.filetypes = filetypes;
|
||||
this.scheduler = scheduler;
|
||||
this.nexusIndexer = plexusSisuBridge.lookup( NexusIndexer.class );
|
||||
this.allIndexCreators = plexusSisuBridge.lookupList( IndexCreator.class );
|
||||
this.allIndexCreators = mavenIndexerUtils.getAllIndexCreators();
|
||||
}
|
||||
|
||||
public String getDescription()
|
||||
|
@ -126,7 +128,7 @@ public class NexusIndexerConsumer
|
|||
public void beginScan( ManagedRepositoryConfiguration repository, Date whenGathered, boolean executeOnEntireRepo )
|
||||
throws ConsumerException
|
||||
{
|
||||
if( executeOnEntireRepo )
|
||||
if ( executeOnEntireRepo )
|
||||
{
|
||||
beginScan( repository, whenGathered );
|
||||
}
|
||||
|
@ -158,7 +160,7 @@ public class NexusIndexerConsumer
|
|||
public void processFile( String path, boolean executeOnEntireRepo )
|
||||
throws Exception
|
||||
{
|
||||
if( executeOnEntireRepo )
|
||||
if ( executeOnEntireRepo )
|
||||
{
|
||||
processFile( path );
|
||||
}
|
||||
|
@ -199,7 +201,7 @@ public class NexusIndexerConsumer
|
|||
|
||||
public void completeScan( boolean executeOnEntireRepo )
|
||||
{
|
||||
if( executeOnEntireRepo )
|
||||
if ( executeOnEntireRepo )
|
||||
{
|
||||
completeScan();
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
<constructor-arg ref="archivaConfiguration"/>
|
||||
<constructor-arg ref="fileTypes"/>
|
||||
<constructor-arg ref="plexusSisuBridge"/>
|
||||
<constructor-arg ref="mavenIndexerUtils"/>
|
||||
</bean>
|
||||
|
||||
<bean id="logger" class="org.apache.maven.archiva.common.utils.Slf4JPlexusLogger">
|
||||
|
|
|
@ -19,6 +19,7 @@ package org.apache.archiva.indexer.search;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import org.apache.archiva.common.plexusbridge.MavenIndexerUtils;
|
||||
import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
|
||||
import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;
|
||||
import org.apache.archiva.indexer.util.SearchUtil;
|
||||
|
@ -56,21 +57,23 @@ import java.util.Set;
|
|||
public class NexusRepositorySearch
|
||||
implements RepositorySearch
|
||||
{
|
||||
private Logger log = LoggerFactory.getLogger( NexusRepositorySearch.class );
|
||||
private Logger log = LoggerFactory.getLogger( getClass() );
|
||||
|
||||
private NexusIndexer indexer;
|
||||
|
||||
private ArchivaConfiguration archivaConfig;
|
||||
|
||||
private List<? extends IndexCreator> allIndexCreators;
|
||||
private MavenIndexerUtils mavenIndexerUtils;
|
||||
|
||||
@Inject
|
||||
public NexusRepositorySearch( PlexusSisuBridge plexusSisuBridge, ArchivaConfiguration archivaConfig )
|
||||
public NexusRepositorySearch( PlexusSisuBridge plexusSisuBridge, ArchivaConfiguration archivaConfig,
|
||||
MavenIndexerUtils mavenIndexerUtils )
|
||||
throws PlexusSisuBridgeException
|
||||
{
|
||||
this.indexer = plexusSisuBridge.lookup( NexusIndexer.class );
|
||||
this.archivaConfig = archivaConfig;
|
||||
allIndexCreators = plexusSisuBridge.lookupList( IndexCreator.class );
|
||||
this.mavenIndexerUtils = mavenIndexerUtils;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -299,9 +302,9 @@ public class NexusRepositorySearch
|
|||
}
|
||||
|
||||
|
||||
protected List<? extends IndexCreator> getAllIndexCreators()
|
||||
protected List<IndexCreator> getAllIndexCreators()
|
||||
{
|
||||
return allIndexCreators;
|
||||
return mavenIndexerUtils.getAllIndexCreators();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -199,4 +199,14 @@ public class SearchFields
|
|||
{
|
||||
this.bundleExportService = bundleExportService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "SearchFields{" + "groupId='" + groupId + '\'' + ", artifactId='" + artifactId + '\'' + ", version='"
|
||||
+ version + '\'' + ", packaging='" + packaging + '\'' + ", className='" + className + '\''
|
||||
+ ", repositories=" + repositories + ", bundleVersion='" + bundleVersion + '\'' + ", bundleSymbolicName='"
|
||||
+ bundleSymbolicName + '\'' + ", bundleExportPackage='" + bundleExportPackage + '\''
|
||||
+ ", bundleExportService='" + bundleExportService + '\'' + '}';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,5 +49,9 @@
|
|||
<groupId>javax.annotation</groupId>
|
||||
<artifactId>jsr250-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven.indexer</groupId>
|
||||
<artifactId>indexer-core</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
package org.apache.archiva.common.plexusbridge;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import org.apache.maven.index.context.IndexCreator;
|
||||
import org.apache.maven.index.creator.JarFileContentsIndexCreator;
|
||||
import org.apache.maven.index.creator.MavenArchetypeArtifactInfoIndexCreator;
|
||||
import org.apache.maven.index.creator.MavenPluginArtifactInfoIndexCreator;
|
||||
import org.apache.maven.index.creator.MinimalArtifactInfoIndexCreator;
|
||||
import org.apache.maven.index.creator.OSGIArtifactIndexCreator;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Olivier Lamy
|
||||
* @since 1.4
|
||||
*/
|
||||
@Service("mavenIndexerUtils")
|
||||
public class MavenIndexerUtils
|
||||
{
|
||||
|
||||
private Logger log = LoggerFactory.getLogger( getClass() );
|
||||
|
||||
private List<? extends IndexCreator> allIndexCreators;
|
||||
|
||||
@Inject
|
||||
public MavenIndexerUtils( PlexusSisuBridge plexusSisuBridge )
|
||||
throws PlexusSisuBridgeException
|
||||
{
|
||||
allIndexCreators = new ArrayList( plexusSisuBridge.lookupList( IndexCreator.class ) );
|
||||
|
||||
if ( allIndexCreators == null || allIndexCreators.isEmpty() )
|
||||
{
|
||||
// olamy when the TCL is not a URLClassLoader lookupList fail !
|
||||
// when using tomcat maven plugin so adding a simple hack
|
||||
log.warn( "using lookList from sisu plexus failed so build indexCreator manually" );
|
||||
|
||||
allIndexCreators =
|
||||
Arrays.asList( new OSGIArtifactIndexCreator(), new MavenArchetypeArtifactInfoIndexCreator(),
|
||||
new MinimalArtifactInfoIndexCreator(), new JarFileContentsIndexCreator(),
|
||||
new MavenPluginArtifactInfoIndexCreator() );
|
||||
|
||||
}
|
||||
|
||||
log.debug( "allIndexCreators {}", allIndexCreators );
|
||||
}
|
||||
|
||||
public List<? extends IndexCreator> getAllIndexCreators()
|
||||
{
|
||||
return allIndexCreators;
|
||||
}
|
||||
|
||||
public void setAllIndexCreators( List<IndexCreator> allIndexCreators )
|
||||
{
|
||||
this.allIndexCreators = allIndexCreators;
|
||||
}
|
||||
}
|
|
@ -25,6 +25,12 @@ package org.apache.archiva.common.plexusbridge;
|
|||
public class PlexusSisuBridgeException
|
||||
extends Exception
|
||||
{
|
||||
|
||||
public PlexusSisuBridgeException( String message )
|
||||
{
|
||||
super( message );
|
||||
}
|
||||
|
||||
public PlexusSisuBridgeException( String message, Throwable throwable )
|
||||
{
|
||||
super( message, throwable );
|
||||
|
|
|
@ -19,6 +19,7 @@ package org.apache.archiva.scheduler.indexing;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import org.apache.archiva.common.plexusbridge.MavenIndexerUtils;
|
||||
import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
|
||||
import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;
|
||||
import org.apache.lucene.search.BooleanClause;
|
||||
|
@ -75,6 +76,9 @@ public class ArchivaIndexingTaskExecutor
|
|||
@Inject
|
||||
private PlexusSisuBridge plexusSisuBridge;
|
||||
|
||||
@Inject
|
||||
private MavenIndexerUtils mavenIndexerUtils;
|
||||
|
||||
private NexusIndexer nexusIndexer;
|
||||
|
||||
private List<IndexCreator> allIndexCreators;
|
||||
|
@ -91,7 +95,7 @@ public class ArchivaIndexingTaskExecutor
|
|||
|
||||
nexusIndexer = plexusSisuBridge.lookup( NexusIndexer.class );
|
||||
|
||||
allIndexCreators = plexusSisuBridge.lookupList( IndexCreator.class );
|
||||
allIndexCreators = mavenIndexerUtils.getAllIndexCreators();
|
||||
}
|
||||
|
||||
public void executeTask( Task task )
|
||||
|
|
|
@ -159,7 +159,7 @@ public class ArtifactIndexingTask
|
|||
}
|
||||
|
||||
public static IndexingContext createContext( ManagedRepositoryConfiguration repository, NexusIndexer indexer,
|
||||
List<IndexCreator> indexCreators )
|
||||
List<? extends IndexCreator> indexCreators )
|
||||
throws IOException, UnsupportedExistingLuceneIndexException
|
||||
{
|
||||
String indexDir = repository.getIndexDir();
|
||||
|
|
|
@ -20,6 +20,7 @@ package org.apache.archiva.scheduler.indexing;
|
|||
*/
|
||||
|
||||
import junit.framework.TestCase;
|
||||
import org.apache.archiva.common.plexusbridge.MavenIndexerUtils;
|
||||
import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.lucene.search.BooleanClause.Occur;
|
||||
|
@ -33,7 +34,6 @@ import org.apache.maven.index.FlatSearchRequest;
|
|||
import org.apache.maven.index.FlatSearchResponse;
|
||||
import org.apache.maven.index.MAVEN;
|
||||
import org.apache.maven.index.NexusIndexer;
|
||||
import org.apache.maven.index.context.IndexCreator;
|
||||
import org.apache.maven.index.context.IndexingContext;
|
||||
import org.apache.maven.index.expr.SourcedSearchExpression;
|
||||
import org.apache.maven.index.expr.StringSearchExpression;
|
||||
|
@ -76,6 +76,9 @@ public class ArchivaIndexingTaskExecutorTest
|
|||
@Inject
|
||||
PlexusSisuBridge plexusSisuBridge;
|
||||
|
||||
@Inject
|
||||
MavenIndexerUtils mavenIndexerUtils;
|
||||
|
||||
@Before
|
||||
public void setUp()
|
||||
throws Exception
|
||||
|
@ -96,8 +99,7 @@ public class ArchivaIndexingTaskExecutorTest
|
|||
|
||||
indexer = plexusSisuBridge.lookup( NexusIndexer.class );
|
||||
|
||||
ArtifactIndexingTask.createContext( repositoryConfig, indexer,
|
||||
plexusSisuBridge.lookupList( IndexCreator.class ) );
|
||||
ArtifactIndexingTask.createContext( repositoryConfig, indexer, mavenIndexerUtils.getAllIndexCreators() );
|
||||
}
|
||||
|
||||
@After
|
||||
|
@ -153,7 +155,7 @@ public class ArchivaIndexingTaskExecutorTest
|
|||
new File( repositoryConfig.getLocation() ),
|
||||
new File( repositoryConfig.getLocation(),
|
||||
".indexer" ), null, null,
|
||||
plexusSisuBridge.lookupList( IndexCreator.class ) );
|
||||
mavenIndexerUtils.getAllIndexCreators() );
|
||||
context.setSearchable( true );
|
||||
}
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ import java.util.Map;
|
|||
|
||||
/**
|
||||
* Search all indexed fields by the given criteria.
|
||||
*
|
||||
* <p/>
|
||||
* plexus.component role="com.opensymphony.xwork2.Action" role-hint="searchAction" instantiation-strategy="per-lookup"
|
||||
*/
|
||||
@Controller( "searchAction" )
|
||||
|
@ -170,8 +170,8 @@ public class SearchAction
|
|||
public String filteredSearch()
|
||||
throws MalformedURLException
|
||||
{
|
||||
if ( ( groupId == null || "".equals( groupId ) ) && ( artifactId == null || "".equals( artifactId ) ) &&
|
||||
( className == null || "".equals( className ) ) && ( version == null || "".equals( version ) ) )
|
||||
if ( ( groupId == null || "".equals( groupId ) ) && ( artifactId == null || "".equals( artifactId ) )
|
||||
&& ( className == null || "".equals( className ) ) && ( version == null || "".equals( version ) ) )
|
||||
{
|
||||
addActionError( "Advanced Search - At least one search criteria must be provided." );
|
||||
return INPUT;
|
||||
|
@ -188,8 +188,8 @@ public class SearchAction
|
|||
limits.setPageSize( rowCount );
|
||||
List<String> selectedRepos = new ArrayList<String>();
|
||||
|
||||
if ( repositoryId == null || StringUtils.isBlank( repositoryId ) || "all".equals( StringUtils.stripToEmpty(
|
||||
repositoryId ) ) )
|
||||
if ( repositoryId == null || StringUtils.isBlank( repositoryId ) || "all".equals(
|
||||
StringUtils.stripToEmpty( repositoryId ) ) )
|
||||
{
|
||||
selectedRepos = getObservableRepos();
|
||||
}
|
||||
|
@ -205,6 +205,8 @@ public class SearchAction
|
|||
|
||||
SearchFields searchFields = new SearchFields( groupId, artifactId, version, null, className, selectedRepos );
|
||||
|
||||
log.debug( "filteredSearch with searchFields {}", searchFields );
|
||||
|
||||
// TODO: add packaging in the list of fields for advanced search (UI)?
|
||||
try
|
||||
{
|
||||
|
@ -263,12 +265,14 @@ public class SearchAction
|
|||
return GlobalResults.ACCESS_TO_NO_REPOS;
|
||||
}
|
||||
|
||||
log.debug( "quickSearch with selectedRepos {} query {}", selectedRepos, q );
|
||||
|
||||
try
|
||||
{
|
||||
if ( searchResultsOnly && !completeQueryString.equals( "" ) )
|
||||
{
|
||||
results = getNexusSearch().search( getPrincipal(), selectedRepos, q, limits,
|
||||
parseCompleteQueryString() );
|
||||
results =
|
||||
getNexusSearch().search( getPrincipal(), selectedRepos, q, limits, parseCompleteQueryString() );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -552,8 +556,8 @@ public class SearchAction
|
|||
{
|
||||
if ( nexusSearch == null )
|
||||
{
|
||||
WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(
|
||||
ServletActionContext.getServletContext() );
|
||||
WebApplicationContext wac =
|
||||
WebApplicationContextUtils.getRequiredWebApplicationContext( ServletActionContext.getServletContext() );
|
||||
nexusSearch = wac.getBean( "nexusSearch", RepositorySearch.class );
|
||||
}
|
||||
return nexusSearch;
|
||||
|
|
|
@ -27,7 +27,10 @@
|
|||
<param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/>
|
||||
</layout>
|
||||
</appender>
|
||||
<logger name="com.opensymphony.xwork2.interceptor.ParametersInterceptor">
|
||||
<logger name="org.apache.maven.archiva.web.action.SearchAction">
|
||||
<level value="debug"/>
|
||||
</logger>
|
||||
<logger name="org.apache.archiva.indexer.search.NexusRepositorySearch">
|
||||
<level value="debug"/>
|
||||
</logger>
|
||||
<logger name="org.apache.commons.configuration.DefaultConfigurationBuilder">
|
||||
|
|
Loading…
Reference in New Issue