aboutsummaryrefslogtreecommitdiffstats
path: root/archiva-modules
diff options
context:
space:
mode:
authorMartin Stockhammer <martin_s@apache.org>2017-10-13 22:23:08 +0200
committerMartin Stockhammer <martin_s@apache.org>2017-10-13 22:23:08 +0200
commit51217357951c5701fc8317d7b1a7cd3c1dc3ada9 (patch)
tree3d9cbf57e4bc2dc0259ca93f01d07281ec5a7c93 /archiva-modules
parent267b6a702be7b3760607482dcc9d5af40f8e1609 (diff)
downloadarchiva-51217357951c5701fc8317d7b1a7cd3c1dc3ada9.tar.gz
archiva-51217357951c5701fc8317d7b1a7cd3c1dc3ada9.zip
Adding maven repo implementation and unit test
Diffstat (limited to 'archiva-modules')
-rw-r--r--archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractManagedRepository.java29
-rw-r--r--archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java43
-rw-r--r--archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableManagedRepository.java18
-rw-r--r--archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableRepository.java23
-rw-r--r--archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ManagedRepository.java9
-rw-r--r--archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java13
-rw-r--r--archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java4
-rw-r--r--archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java11
-rw-r--r--archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java24
-rw-r--r--archiva-modules/plugins/maven2-repository/pom.xml9
-rw-r--r--archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenManagedRepository.java7
-rw-r--r--archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRemoteRepository.java3
-rw-r--r--archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java66
-rw-r--r--archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java149
14 files changed, 303 insertions, 105 deletions
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractManagedRepository.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractManagedRepository.java
index d0edb72f5..3f482ca47 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractManagedRepository.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractManagedRepository.java
@@ -20,7 +20,10 @@ package org.apache.archiva.repository;
*/
+import java.util.Collections;
+import java.util.HashSet;
import java.util.Locale;
+import java.util.Set;
/**
* Simple implementation of a managed repository.
@@ -29,6 +32,8 @@ public abstract class AbstractManagedRepository extends AbstractRepository imple
{
private boolean blocksRedeployment = false;
private ManagedRepositoryContent content;
+ private Set<ReleaseScheme> activeReleaseSchemes = new HashSet<>( );
+ private Set<ReleaseScheme> uActiveReleaseSchemes = Collections.unmodifiableSet( activeReleaseSchemes );
public AbstractManagedRepository( RepositoryType type, String id, String name )
{
@@ -62,4 +67,28 @@ public abstract class AbstractManagedRepository extends AbstractRepository imple
{
return blocksRedeployment;
}
+
+ @Override
+ public Set<ReleaseScheme> getActiveReleaseSchemes( )
+ {
+ return uActiveReleaseSchemes;
+ }
+
+ @Override
+ public void addActiveReleaseScheme( ReleaseScheme scheme )
+ {
+ this.activeReleaseSchemes.add(scheme);
+ }
+
+ @Override
+ public void removeActiveReleaseScheme( ReleaseScheme scheme )
+ {
+ this.activeReleaseSchemes.remove(scheme);
+ }
+
+ @Override
+ public void clearActiveReleaseSchemes( )
+ {
+ this.activeReleaseSchemes.clear();
+ }
}
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java
index 0d67d5da3..ad55d5c46 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java
@@ -26,11 +26,9 @@ import com.cronutils.parser.CronParser;
import org.apache.archiva.repository.features.RepositoryFeature;
import java.net.URI;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
@@ -54,11 +52,8 @@ public abstract class AbstractRepository implements EditableRepository
private Set<URI> uFailoverLocations = Collections.unmodifiableSet( failoverLocations );
private boolean scanned = true;
String schedulingDefinition = "0 0 02 * *";
- private boolean index;
- private URI indexPath;
+ private boolean index = true;
private String layout;
- private Set<ReleaseScheme> activeReleaseSchemes = new HashSet<>( );
- private Set<ReleaseScheme> uActiveReleaseSchemes = Collections.unmodifiableSet( activeReleaseSchemes );
public static final CronDefinition CRON_DEFINITION = CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ);
public AbstractRepository(RepositoryType type, String id, String name) {
@@ -145,24 +140,12 @@ public abstract class AbstractRepository implements EditableRepository
}
@Override
- public URI getIndexPath( )
- {
- return indexPath;
- }
-
- @Override
public String getLayout( )
{
return layout;
}
@Override
- public Set<ReleaseScheme> getActiveReleaseSchemes( )
- {
- return uActiveReleaseSchemes;
- }
-
- @Override
public abstract RepositoryCapabilities getCapabilities( );
@Override
@@ -232,36 +215,12 @@ public abstract class AbstractRepository implements EditableRepository
}
@Override
- public void setIndexPath( URI indexPath )
- {
- this.indexPath = indexPath;
- }
-
- @Override
public void setLayout( String layout )
{
this.layout = layout;
}
@Override
- public void addActiveReleaseScheme( ReleaseScheme scheme )
- {
- this.activeReleaseSchemes.add(scheme);
- }
-
- @Override
- public void removeActiveReleaseScheme( ReleaseScheme scheme )
- {
- this.activeReleaseSchemes.remove(scheme);
- }
-
- @Override
- public void clearActiveReleaseSchemes( )
- {
- this.activeReleaseSchemes.clear();
- }
-
- @Override
public void setSchedulingDefinition(String cronExpression) {
CronParser parser = new CronParser(CRON_DEFINITION);
parser.parse(cronExpression).validate();
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableManagedRepository.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableManagedRepository.java
index 1e40805ee..4596201c8 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableManagedRepository.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableManagedRepository.java
@@ -35,4 +35,22 @@ public interface EditableManagedRepository extends EditableRepository, ManagedRe
* @param content
*/
void setContent(ManagedRepositoryContent content);
+
+ /**
+ * Adds an active release scheme. Release schemes may be combined.
+ * @param scheme the scheme to add.
+ */
+ void addActiveReleaseScheme(ReleaseScheme scheme);
+
+ /**
+ * Removes an active release scheme from the set.
+ * @param scheme the scheme to remove.
+ */
+ void removeActiveReleaseScheme(ReleaseScheme scheme);
+
+ /**
+ * Clears all active release schemes.
+ */
+ void clearActiveReleaseSchemes();
+
}
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableRepository.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableRepository.java
index 8188e2131..3af558080 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableRepository.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableRepository.java
@@ -114,33 +114,10 @@ public interface EditableRepository extends Repository
void setIndex(boolean hasIndex);
/**
- * Sets the path to the index directory. May be a relative or absolute URI.
- * @param indexPath the path
- */
- void setIndexPath(URI indexPath);
-
- /**
* Sets the layout string.
* @param layout
*/
void setLayout(String layout);
- /**
- * Adds an active release scheme. Release schemes may be combined.
- * @param scheme the scheme to add.
- */
- void addActiveReleaseScheme(ReleaseScheme scheme);
-
- /**
- * Removes an active release scheme from the set.
- * @param scheme the scheme to remove.
- */
- void removeActiveReleaseScheme(ReleaseScheme scheme);
-
- /**
- * Clears all active release schemes.
- */
- void clearActiveReleaseSchemes();
-
}
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ManagedRepository.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ManagedRepository.java
index 62a27148a..b4ab89d98 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ManagedRepository.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ManagedRepository.java
@@ -20,6 +20,8 @@ package org.apache.archiva.repository;
*/
+import java.util.Set;
+
/**
* Represents a managed repository, that is readable and writable.
*/
@@ -37,4 +39,11 @@ public interface ManagedRepository extends Repository {
* @return
*/
boolean blocksRedeployments();
+
+ /**
+ * Returns the release schemes that are active by this repository. E.g. for maven repositories
+ * this may either be a release repository, a snapshot repository or a combined repository.
+ * @return
+ */
+ Set<ReleaseScheme> getActiveReleaseSchemes();
}
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java
index 3e508848d..229f30f68 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java
@@ -114,12 +114,6 @@ public interface Repository {
boolean hasIndex();
/**
- * Returns the path to the index parent folder. May be a HTTP URL or a file path.
- * @return
- */
- URI getIndexPath();
-
- /**
* Returns a layout definition. The returned string may be implementation specific and is not
* standardized.
*
@@ -127,13 +121,6 @@ public interface Repository {
*/
String getLayout();
- /**
- * Returns the release schemes that are active by this repository. E.g. for maven repositories
- * this may either be a release repository, a snapshot repository or a combined repository.
- * @return
- */
- Set<ReleaseScheme> getActiveReleaseSchemes();
-
/**
* Returns the capabilities of the repository implementation.
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
index fdd21531e..0d5fd7eb9 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
@@ -34,7 +34,7 @@ public interface RepositoryProvider
{
Set<RepositoryType> provides();
- ManagedRepository createManagedInstance( ManagedRepositoryConfiguration configuration);
+ ManagedRepository createManagedInstance( ManagedRepositoryConfiguration configuration) throws RepositoryException;
- RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration configuration);
+ RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration configuration) throws RepositoryException;
}
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java
index 8844f585d..8f608d228 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java
@@ -100,7 +100,7 @@ public class RepositoryRegistry
ManagedRepository repo = createNewManagedRepository( providerMap.get( repositoryType ), repoConfig );
managedRepos.put(repo.getId(), repo);
} catch (Exception e) {
- log.error("Could not create managed repository "+repoConfig.getId(), e);
+ log.error("Could not create managed repository {}: {}", repoConfig.getId(), e.getMessage(), e);
}
}
}
@@ -142,7 +142,14 @@ public class RepositoryRegistry
{
RepositoryType repositoryType = RepositoryType.valueOf( repoConfig.getType( ) );
if (providerMap.containsKey( repositoryType )) {
- remoteRepos.put(repoConfig.getId(), providerMap.get(repositoryType).createRemoteInstance( repoConfig ));
+ try
+ {
+ remoteRepos.put(repoConfig.getId(), providerMap.get(repositoryType).createRemoteInstance( repoConfig ));
+ }
+ catch ( Exception e )
+ {
+ log.error("Could not create repository {} from config: {}", repoConfig.getId(), e.getMessage(), e);
+ }
}
}
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java
index 311e0d9cb..38c44c83e 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java
@@ -20,6 +20,8 @@ package org.apache.archiva.repository.features;
*/
+import java.net.URI;
+
/**
*
* This feature provides some information about index creation.
@@ -29,6 +31,8 @@ public class IndexCreationFeature implements RepositoryFeature<IndexCreationFeat
private boolean skipPackedIndexCreation = false;
+ private URI indexPath;
+
public IndexCreationFeature() {
}
@@ -58,4 +62,24 @@ public class IndexCreationFeature implements RepositoryFeature<IndexCreationFeat
public void setSkipPackedIndexCreation(boolean skipPackedIndexCreation) {
this.skipPackedIndexCreation = skipPackedIndexCreation;
}
+
+ /**
+ * Returns the path that is used to store the index.
+ * @return the uri (may be relative or absolute)
+ */
+ public URI getIndexPath( )
+ {
+ return indexPath;
+ }
+
+ /**
+ * Sets the path that is used to store the index.
+ * @param indexPath the uri to the index path (may be relative)
+ */
+ public void setIndexPath( URI indexPath )
+ {
+ this.indexPath = indexPath;
+ }
+
+
}
diff --git a/archiva-modules/plugins/maven2-repository/pom.xml b/archiva-modules/plugins/maven2-repository/pom.xml
index ab01552b5..bf4a7244c 100644
--- a/archiva-modules/plugins/maven2-repository/pom.xml
+++ b/archiva-modules/plugins/maven2-repository/pom.xml
@@ -289,6 +289,15 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <systemPropertyVariables>
+ <appserver.base>${project.build.directory}/test-repository</appserver.base>
+ </systemPropertyVariables>
+ </configuration>
+ </plugin>
</plugins>
<pluginManagement>
<plugins>
diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenManagedRepository.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenManagedRepository.java
index 0c24c7b02..8f885c23a 100644
--- a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenManagedRepository.java
+++ b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenManagedRepository.java
@@ -30,7 +30,10 @@ import org.apache.archiva.repository.features.IndexCreationFeature;
import org.apache.archiva.repository.features.RepositoryFeature;
import org.apache.archiva.repository.features.StagingRepositoryFeature;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.Locale;
+import java.util.Set;
/**
* Maven2 managed repository implementation.
@@ -97,4 +100,8 @@ public class MavenManagedRepository extends AbstractManagedRepository
}
return false;
}
+
+
+
+
}
diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRemoteRepository.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRemoteRepository.java
index de2732267..9887a056d 100644
--- a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRemoteRepository.java
+++ b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRemoteRepository.java
@@ -46,8 +46,7 @@ public class MavenRemoteRepository extends AbstractRemoteRepository
new ReleaseScheme[] { ReleaseScheme.RELEASE, ReleaseScheme.SNAPSHOT },
new String[] { MavenManagedRepository.DEFAULT_LAYOUT, MavenManagedRepository.LEGACY_LAYOUT},
new String[] {},
- new String[] {ArtifactCleanupFeature.class.getName(), IndexCreationFeature.class.getName(),
- StagingRepositoryFeature.class.getName(), RemoteIndexFeature.class.getName()},
+ new String[] {RemoteIndexFeature.class.getName()},
true,
true,
true,
diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
index 1c02e1f75..2f862fee4 100644
--- a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
+++ b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
@@ -27,7 +27,7 @@ import org.apache.archiva.repository.ManagedRepository;
import org.apache.archiva.repository.PasswordCredentials;
import org.apache.archiva.repository.ReleaseScheme;
import org.apache.archiva.repository.RemoteRepository;
-import org.apache.archiva.repository.Repository;
+import org.apache.archiva.repository.RepositoryException;
import org.apache.archiva.repository.RepositoryProvider;
import org.apache.archiva.repository.RepositoryType;
import org.apache.archiva.repository.features.ArtifactCleanupFeature;
@@ -46,6 +46,7 @@ import java.time.Period;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
+import java.util.regex.Pattern;
/**
* Provider for the maven2 repository implementations
@@ -53,6 +54,7 @@ import java.util.Set;
@Service("mavenRepositoryProvider")
public class MavenRepositoryProvider implements RepositoryProvider
{
+
private static final Logger log = LoggerFactory.getLogger( MavenRepositoryProvider.class );
static final Set<RepositoryType> TYPES = new HashSet<>( );
@@ -66,22 +68,37 @@ public class MavenRepositoryProvider implements RepositoryProvider
return TYPES;
}
+ private URI getURIFromConfig(String config) throws RepositoryException {
+ URI uri;
+ try {
+ uri = new URI(config);
+ if (uri.getScheme()==null) {
+ uri = new URI("file://"+config);
+ }
+ if (!"file".equals(uri.getScheme())) {
+ log.error("Bad URI scheme found: {}, URI={}", uri.getScheme(), uri);
+ throw new RepositoryException("The uri "+config+" is not valid. Only file:// URI is allowed for maven.");
+ }
+ } catch (URISyntaxException e) {
+ String newCfg = "file://"+config;
+ try
+ {
+ uri = new URI(newCfg);
+ }
+ catch ( URISyntaxException e1 )
+ {
+ log.error("Could not create URI from {} -> ", config, newCfg);
+ throw new RepositoryException( "The config entry "+config+" cannot be converted to URI." );
+ }
+ }
+ return uri;
+ }
+
@Override
- public ManagedRepository createManagedInstance( ManagedRepositoryConfiguration cfg )
+ public ManagedRepository createManagedInstance( ManagedRepositoryConfiguration cfg ) throws RepositoryException
{
MavenManagedRepository repo = new MavenManagedRepository(cfg.getId() ,cfg.getName());
- try
- {
- if (cfg.getLocation().startsWith("file:")) {
- repo.setLocation( new URI(cfg.getLocation()) );
- } else {
- repo.setLocation( new URI("file://"+cfg.getLocation()) );
- }
- }
- catch ( URISyntaxException e )
- {
- log.error("Could not set repository uri "+cfg.getLocation());
- }
+ repo.setLocation( getURIFromConfig( cfg.getLocation() ) );
setBaseConfig( repo, cfg );
repo.setSchedulingDefinition(cfg.getRefreshCronExpression());
repo.setBlocksRedeployment( cfg.isBlockRedeployments() );
@@ -101,6 +118,7 @@ public class MavenRepositoryProvider implements RepositoryProvider
IndexCreationFeature indexCreationFeature = repo.getFeature( IndexCreationFeature.class ).get( );
indexCreationFeature.setSkipPackedIndexCreation( cfg.isSkipPackedIndexCreation() );
+ indexCreationFeature.setIndexPath( getURIFromConfig( cfg.getIndexDir() ) );
ArtifactCleanupFeature artifactCleanupFeature = repo.getFeature( ArtifactCleanupFeature.class ).get();
@@ -111,6 +129,8 @@ public class MavenRepositoryProvider implements RepositoryProvider
return repo;
}
+
+
@Override
public RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration cfg )
{
@@ -147,9 +167,14 @@ public class MavenRepositoryProvider implements RepositoryProvider
repo.setExtraHeaders( cfg.getExtraHeaders() );
repo.setExtraParameters( cfg.getExtraParameters() );
PasswordCredentials credentials = new PasswordCredentials();
- credentials.setPassword( cfg.getPassword().toCharArray() );
- credentials.setUsername( cfg.getUsername() );
- repo.setCredentials( credentials );
+ if (cfg.getPassword()!=null && cfg.getUsername()!=null)
+ {
+ credentials.setPassword( cfg.getPassword( ).toCharArray( ) );
+ credentials.setUsername( cfg.getUsername() );
+ repo.setCredentials( credentials );
+ } else {
+ credentials.setPassword( new char[0] );
+ }
return repo;
}
@@ -161,20 +186,19 @@ public class MavenRepositoryProvider implements RepositoryProvider
{
if ( StringUtils.isEmpty( indexDir )) {
repo.setIndex( false );
- repo.setIndexPath( null );
} else
{
if ( indexDir.startsWith( "file://" ) )
{
- repo.setIndexPath( new URI( indexDir ) );
+ //repo.setIndexPath( new URI( indexDir ) );
}
else
{
- repo.setIndexPath( new URI( "file://" + indexDir ) );
+ //repo.setIndexPath( new URI( "file://" + indexDir ) );
}
}
}
- catch ( URISyntaxException e )
+ catch ( Exception e )
{
log.error("Could not set index path "+cfg.getIndexDir());
repo.setIndex(false);
diff --git a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
new file mode 100644
index 000000000..9a08f070b
--- /dev/null
+++ b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
@@ -0,0 +1,149 @@
+package org.apache.archiva.repository.maven2;
+
+/*
+ * 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.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.ReleaseScheme;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RepositoryType;
+import org.apache.archiva.repository.UnsupportedFeatureException;
+import org.apache.archiva.repository.features.ArtifactCleanupFeature;
+import org.apache.archiva.repository.features.IndexCreationFeature;
+import org.apache.archiva.repository.features.RemoteIndexFeature;
+import org.apache.archiva.repository.features.StagingRepositoryFeature;
+import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.time.Period;
+
+import static org.junit.Assert.*;
+
+/**
+ * @author Martin Stockhammer <martin_s@apache.org>
+ */
+@RunWith( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration( { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context-no-mock-conf.xml" } )
+public class MavenRepositoryProviderTest
+{
+
+ @Inject
+ @Named( "archivaConfiguration#default" )
+ ArchivaConfiguration archivaConfiguration;
+
+ MavenRepositoryProvider provider;
+
+
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ provider = new MavenRepositoryProvider();
+ }
+
+ @Test
+ public void provides( ) throws Exception
+ {
+ assertEquals(1, provider.provides().size());
+ assertEquals( RepositoryType.MAVEN, provider.provides().iterator().next());
+ }
+
+ @Test
+ public void createManagedInstance( ) throws Exception
+ {
+ assertNotNull(archivaConfiguration);
+ assertNotNull(archivaConfiguration.getConfiguration());
+ ManagedRepositoryConfiguration repo = archivaConfiguration.getConfiguration().getManagedRepositories().get(0);
+ ManagedRepository mr = provider.createManagedInstance( repo );
+ assertNotNull(mr.getLocation());
+ assertTrue(mr.getLocation().toString().endsWith( "/repositories/internal" ));
+ assertEquals("Archiva Managed Internal Repository", mr.getName());
+ assertEquals(1, mr.getActiveReleaseSchemes().size());
+ assertEquals( ReleaseScheme.RELEASE, mr.getActiveReleaseSchemes().iterator().next());
+ assertEquals("internal", mr.getId());
+ assertTrue(mr.blocksRedeployments());
+ assertEquals("0 0 * * * ?", mr.getSchedulingDefinition());
+ assertTrue(mr.isScanned());
+ ArtifactCleanupFeature artifactCleanupFeature = mr.getFeature( ArtifactCleanupFeature.class ).get();
+ assertEquals( Period.ofDays( 30), artifactCleanupFeature.getRetentionTime());
+ assertFalse(artifactCleanupFeature.isDeleteReleasedSnapshots());
+ assertEquals(2, artifactCleanupFeature.getRetentionCount());
+
+ IndexCreationFeature indexCreationFeature = mr.getFeature( IndexCreationFeature.class ).get();
+ assertNotNull(indexCreationFeature.getIndexPath());
+ assertTrue(indexCreationFeature.getIndexPath().toString().endsWith("/repositories/internal/.indexer"));
+ assertTrue(indexCreationFeature.getIndexPath().isAbsolute());
+ assertFalse(indexCreationFeature.isSkipPackedIndexCreation());
+
+ StagingRepositoryFeature stagingRepositoryFeature = mr.getFeature( StagingRepositoryFeature.class ).get();
+ assertFalse(stagingRepositoryFeature.isStageRepoNeeded());
+ assertNull(stagingRepositoryFeature.getStagingRepository());
+
+
+ }
+
+ @Test
+ public void createRemoteInstance( ) throws Exception
+ {
+ assertNotNull(archivaConfiguration);
+ assertNotNull(archivaConfiguration.getConfiguration());
+ RemoteRepositoryConfiguration repo = archivaConfiguration.getConfiguration().getRemoteRepositories().get(0);
+ RemoteRepository mr = provider.createRemoteInstance( repo );
+ assertNotNull(mr.getLocation());
+ assertEquals("https://repo.maven.apache.org/maven2", mr.getLocation().toString());
+ assertEquals("Central Repository", mr.getName());
+ assertEquals("central", mr.getId());
+ assertEquals("0 0 08 ? * SUN", mr.getSchedulingDefinition());
+ assertTrue(mr.isScanned());
+ assertNull(mr.getLoginCredentials());
+ try
+ {
+ ArtifactCleanupFeature artifactCleanupFeature = mr.getFeature( ArtifactCleanupFeature.class ).get( );
+ throw new Exception("artifactCleanupFeature should not be available");
+ } catch ( UnsupportedFeatureException e ) {
+ // correct
+ }
+
+ try
+ {
+ IndexCreationFeature indexCreationFeature = mr.getFeature( IndexCreationFeature.class ).get( );
+ throw new Exception("indexCreationFeature should not be available");
+ } catch (UnsupportedFeatureException e) {
+ // correct
+ }
+ try
+ {
+ StagingRepositoryFeature stagingRepositoryFeature = mr.getFeature( StagingRepositoryFeature.class ).get( );
+ throw new Exception("stagingRepositoryFeature should not be available");
+ } catch (UnsupportedFeatureException e) {
+ // correct
+ }
+ RemoteIndexFeature remoteIndexFeature = mr.getFeature( RemoteIndexFeature.class ).get();
+ assertNull(remoteIndexFeature.getProxyId());
+ }
+
+} \ No newline at end of file