Parcourir la source

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
tags/archiva-1.4-M1
Olivier Lamy il y a 12 ans
Parent
révision
c7607a63e5
12 fichiers modifiés avec 154 ajouts et 35 suppressions
  1. 15
    13
      archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumer.java
  2. 1
    0
      archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/resources/META-INF/spring-context.xml
  3. 9
    6
      archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
  4. 10
    0
      archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java
  5. 4
    0
      archiva-modules/archiva-base/archiva-plexus-bridge/pom.xml
  6. 80
    0
      archiva-modules/archiva-base/archiva-plexus-bridge/src/main/java/org/apache/archiva/common/plexusbridge/MavenIndexerUtils.java
  7. 6
    0
      archiva-modules/archiva-base/archiva-plexus-bridge/src/main/java/org/apache/archiva/common/plexusbridge/PlexusSisuBridgeException.java
  8. 5
    1
      archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java
  9. 1
    1
      archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArtifactIndexingTask.java
  10. 6
    4
      archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutorTest.java
  11. 13
    9
      archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
  12. 4
    1
      archiva-modules/archiva-web/archiva-webapp/src/test/resources/log4j.xml

+ 15
- 13
archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumer.java Voir le fichier

@@ -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,14 +128,14 @@ public class NexusIndexerConsumer
public void beginScan( ManagedRepositoryConfiguration repository, Date whenGathered, boolean executeOnEntireRepo )
throws ConsumerException
{
if( executeOnEntireRepo )
if ( executeOnEntireRepo )
{
beginScan( repository, whenGathered );
}
else
{
this.repository = repository;
managedRepository = new File( repository.getLocation() );
managedRepository = new File( repository.getLocation() );
}
}

@@ -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();
}

+ 1
- 0
archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/resources/META-INF/spring-context.xml Voir le fichier

@@ -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">

+ 9
- 6
archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java Voir le fichier

@@ -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();
}



+ 10
- 0
archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java Voir le fichier

@@ -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 + '\'' + '}';
}
}

+ 4
- 0
archiva-modules/archiva-base/archiva-plexus-bridge/pom.xml Voir le fichier

@@ -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>

+ 80
- 0
archiva-modules/archiva-base/archiva-plexus-bridge/src/main/java/org/apache/archiva/common/plexusbridge/MavenIndexerUtils.java Voir le fichier

@@ -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;
}
}

+ 6
- 0
archiva-modules/archiva-base/archiva-plexus-bridge/src/main/java/org/apache/archiva/common/plexusbridge/PlexusSisuBridgeException.java Voir le fichier

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

+ 5
- 1
archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java Voir le fichier

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

+ 1
- 1
archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArtifactIndexingTask.java Voir le fichier

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

+ 6
- 4
archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutorTest.java Voir le fichier

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


+ 13
- 9
archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java Voir le fichier

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

+ 4
- 1
archiva-modules/archiva-web/archiva-webapp/src/test/resources/log4j.xml Voir le fichier

@@ -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">

Chargement…
Annuler
Enregistrer