Author: oching
Date: Mon Apr  7 08:50:57 2008
New Revision: 645576

URL: http://svn.apache.org/viewvc?rev=645576&view=rev
Log:
[MRM-123]
-generate/update rss feeds after repository scan
-add rss feed icon in repositories (for new artifacts in repo feed) and in 
browse artifact (for new versions of artifact feed)

Added:
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/rss/
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/rss/rss.xml
Modified:
    archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/pom.xml
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/DefaultRepositoryScanner.java
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerInstance.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/RssFeedGenerator.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/browse.jsp
    archiva/trunk/pom.xml

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/pom.xml
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/pom.xml?rev=645576&r1=645575&r2=645576&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/pom.xml 
(original)
+++ archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/pom.xml 
Mon Apr  7 08:50:57 2008
@@ -49,6 +49,14 @@
       <artifactId>archiva-configuration</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-rss</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-xml-tools</artifactId>
+    </dependency>
+    <dependency>
       <groupId>xmlunit</groupId>
       <artifactId>xmlunit</artifactId>
       <scope>test</scope>

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/DefaultRepositoryScanner.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/DefaultRepositoryScanner.java?rev=645576&r1=645575&r2=645576&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/DefaultRepositoryScanner.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/DefaultRepositoryScanner.java
 Mon Apr  7 08:50:57 2008
@@ -23,13 +23,20 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.archiva.rss.processor.RssFeedProcessor;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.maven.archiva.configuration.FileTypes;
 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.maven.archiva.consumers.InvalidRepositoryContentConsumer;
 import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
 import org.apache.maven.archiva.consumers.RepositoryContentConsumer;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArtifactReference;
+import org.apache.maven.archiva.repository.ManagedRepositoryContent;
+import org.apache.maven.archiva.repository.RepositoryContentFactory;
 import org.apache.maven.archiva.repository.RepositoryException;
+import org.apache.maven.archiva.repository.RepositoryNotFoundException;
+import org.apache.maven.archiva.repository.layout.LayoutException;
 import org.codehaus.plexus.util.DirectoryWalker;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -55,6 +62,16 @@
      * @plexus.requirement
      */
     private RepositoryContentConsumers consumerUtil;
+    
+    /**
+     * @plexus.requirement
+     */
+    private RepositoryContentFactory repositoryFactory;
+    
+    /**
+     * @plexus.requirement role-hint="new-artifacts"
+     */
+    private RssFeedProcessor rssFeedProcessor;
 
     public RepositoryScanStatistics scan( ManagedRepositoryConfiguration 
repository, long changesSince )
         throws RepositoryException
@@ -126,6 +143,10 @@
         stats.setKnownConsumers( gatherIds( knownContentConsumers ) );
         stats.setInvalidConsumers( gatherIds( invalidContentConsumers ) );
 
+        // generate RSS feeds
+        List<ArchivaArtifact> newArtifacts = getNewArtifacts( 
scannerInstance.getNewFiles(), repository.getId() );
+        rssFeedProcessor.process( newArtifacts );
+        
         return stats;
     }
 
@@ -137,5 +158,41 @@
             ids.add( consumer.getId() );
         }
         return ids;
+    }
+    
+    private List<ArchivaArtifact> getNewArtifacts( List<File> files, String 
repoId )
+    {
+        List<ArchivaArtifact> newArtifacts = new ArrayList<ArchivaArtifact>();
+        
+        // TODO: filter the file types of artifacts that will be included in 
the rss feeds        
+        try
+        {
+            ManagedRepositoryContent repository = 
repositoryFactory.getManagedRepositoryContent( repoId );
+            for( File file : files )
+            {
+                try
+                {
+                    ArtifactReference ref = repository.toArtifactReference( 
file.getAbsolutePath() );
+                    ArchivaArtifact artifact = new ArchivaArtifact( 
ref.getGroupId(),ref.getArtifactId(), ref.getVersion(),
+                                                                   
ref.getClassifier(), ref.getType() );
+                    artifact.getModel().setRepositoryId( repoId );
+                    newArtifacts.add( artifact );
+                }
+                catch ( LayoutException le )
+                {
+                    
+                }
+            }
+        }
+        catch ( RepositoryNotFoundException re )
+        {
+            log.error( re.getMessage() );
+        }
+        catch ( RepositoryException e )
+        {
+            log.error( e.getMessage() );   
+        }
+        
+        return newArtifacts;
     }
 }

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerInstance.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerInstance.java?rev=645576&r1=645575&r2=645576&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerInstance.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerInstance.java
 Mon Apr  7 08:50:57 2008
@@ -20,6 +20,7 @@
  */
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.commons.collections.Closure;
@@ -66,6 +67,8 @@
     private ConsumerProcessFileClosure consumerProcessFile;
 
     private ConsumerWantsFilePredicate consumerWantsFile;
+    
+    private List<File> newFiles = new ArrayList<File>();
 
     public RepositoryScannerInstance( ManagedRepositoryConfiguration 
repository,
                                       List<KnownRepositoryContentConsumer> 
knownConsumerList,
@@ -120,14 +123,15 @@
 
         stats.increaseFileCount();
 
+        // consume files regardless - the predicate will check the timestamp
+        BaseFile basefile = new BaseFile( repository.getLocation(), file );
+        
         // Timestamp finished points to the last successful scan, not this 
current one.
         if ( file.lastModified() >= changesSince )
         {
             stats.increaseNewFileCount();
+            newFiles.add( basefile );       
         }
-
-        // consume files regardless - the predicate will check the timestamp
-        BaseFile basefile = new BaseFile( repository.getLocation(), file );
         
         consumerProcessFile.setBasefile( basefile );
         consumerWantsFile.setBasefile( basefile );
@@ -154,5 +158,10 @@
     public void debug( String message )
     {
         log.debug( "Repository Scanner: " + message );
+    }
+    
+    public List<File> getNewFiles()
+    {
+        return newFiles;
     }
 }

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/RssFeedGenerator.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/RssFeedGenerator.java?rev=645576&r1=645575&r2=645576&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/RssFeedGenerator.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/RssFeedGenerator.java
 Mon Apr  7 08:50:57 2008
@@ -44,7 +44,8 @@
 /**
  * Generates RSS feeds.
  * 
- * @plexus.component role="org.apache.archiva.rss.RssFeedGenerator"
+ * @plexus.component role="org.apache.archiva.rss.RssFeedGenerator" 
+ *      instantiation-strategy="per-lookup"
  * 
  * @author <a href="mailto:[EMAIL PROTECTED]">Maria Odea Ching</a>
  * @version
@@ -57,21 +58,21 @@
     public static String DEFAULT_FEEDTYPE = "rss_2.0";
 
     public static String DEFAULT_LANGUAGE = "en-us";
-    
+
     /**
-     * @plexus.configuration default-value="${appserver.base}/data/rss"
+     * @plexus.configuration default-value="./apps/archiva/rss/"
      */
     private String rssDirectory;
 
     public void generateFeed( String title, String link, String description, 
List<RssFeedEntry> dataEntries,
                               String outputFilename )
-    {   
-        File outputFile = new File( rssDirectory, outputFilename );     
+    {           
+        File outputFile = new File( rssDirectory, outputFilename );
         SyndFeed feed = null;
         List<SyndEntry> existingEntries = null;
-        
-        if( outputFile.exists() )
-        {   
+
+        if ( outputFile.exists() )
+        {
             try
             {
                 SyndFeedInput input = new SyndFeedInput();
@@ -88,25 +89,27 @@
             }
         }
         else
-        {        
-            feed = new SyndFeedImpl();            
-    
+        {
+            feed = new SyndFeedImpl();
+
             feed.setTitle( title );
             feed.setLink( link );
             feed.setDescription( description );
-            feed.setLanguage( DEFAULT_LANGUAGE );            
+            feed.setLanguage( DEFAULT_LANGUAGE );
+            feed.setPublishedDate( Calendar.getInstance().getTime() );
         }
 
-        feed.setFeedType( DEFAULT_FEEDTYPE );
-        feed.setPublishedDate( Calendar.getInstance().getTime() );
+        feed.setFeedType( DEFAULT_FEEDTYPE );        
         feed.setEntries( getEntries( dataEntries, existingEntries ) );
-        
+
         try
-        {            
+        {
             Writer writer = new FileWriter( outputFile );
             SyndFeedOutput output = new SyndFeedOutput();
             output.output( feed, writer );
             writer.close();
+
+            log.debug( "Finished writing feed to " + 
outputFile.getAbsolutePath() );
         }
         catch ( IOException ie )
         {
@@ -119,13 +122,13 @@
     }
 
     private List<SyndEntry> getEntries( List<RssFeedEntry> dataEntries, 
List<SyndEntry> existingEntries )
-    {        
-        List<SyndEntry> entries = existingEntries;     
-        if( entries == null )
+    {
+        List<SyndEntry> entries = existingEntries;
+        if ( entries == null )
         {
             entries = new ArrayList<SyndEntry>();
         }
-        
+
         SyndEntry entry;
         SyndContent description;
 
@@ -151,4 +154,5 @@
     {
         this.rssDirectory = rssDirectory;
     }
+    
 }

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java?rev=645576&r1=645575&r2=645576&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java
 Mon Apr  7 08:50:57 2008
@@ -30,6 +30,8 @@
 import org.apache.archiva.rss.RssFeedGenerator;
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Process new artifacts in the repository and generate RSS feeds.
@@ -50,12 +52,16 @@
      */
     private RssFeedGenerator generator;
 
+    private Logger log = LoggerFactory.getLogger( 
NewArtifactsRssFeedProcessor.class );
+
     /**
      * Process the newly discovered artifacts in the repository. Generate 
feeds for new artifacts in the repository and
      * new versions of artifact.
      */
     public void process( List<ArchivaArtifact> data )
     {
+        log.debug( "Process new artifacts into rss feeds." );
+        
         processNewArtifactsInRepo( data );
         processNewVersionsOfArtifact( data );
     }
@@ -67,19 +73,19 @@
 
         RssFeedEntry entry =
             new RssFeedEntry( NEW_ARTIFACTS_IN_REPO + "\'" + repoId + "\'" + " 
as of " +
-                Calendar.getInstance().getTime(), 
"http://localhost:8080/archiva/repository/"; + repoId );
+                Calendar.getInstance().getTime(), 
"http://localhost:8080/archiva/rss/new_artifacts_"; + repoId + ".xml" );
         String description = "These are the new artifacts found in repository 
" + "\'" + repoId + "\'" + ": \n";
 
         for ( ArchivaArtifact artifact : data )
         {
-            description = description + artifact.toString() + "\n";
+            description = description + artifact.toString() + " | ";
         }
         entry.setDescription( description );
         entries.add( entry );
 
         generateFeed( "new_artifacts_" + repoId + ".xml", 
NEW_ARTIFACTS_IN_REPO + "\'" + repoId + "\'",
-                      "http://localhost:8080/archiva/repository/"; + repoId, 
"New artifacts found in repository " +
-                          "\'" + repoId + "\'" + " during repository scan.", 
entries );
+                      
"http://localhost:8080/archiva/repository/rss/new_artifacts_"; + repoId + ".xml",
+                      "New artifacts found in repository " + "\'" + repoId + 
"\'" + " during repository scan.", entries );
     }
 
     private void processNewVersionsOfArtifact( List<ArchivaArtifact> data )
@@ -100,21 +106,19 @@
         for ( String key : artifactsMap.keySet() )
         {
             List<RssFeedEntry> entries = new ArrayList<RssFeedEntry>();
-            String artifactPath = getArtifactPath( key );
             RssFeedEntry entry =
                 new RssFeedEntry( NEW_VERSIONS_OF_ARTIFACT + "\'" + key + "\'" 
+ " as of " +
-                    Calendar.getInstance().getTime(), 
"http://localhost:8080/archiva/repository/"; + repoId + "/" +
-                    artifactPath );
+                    Calendar.getInstance().getTime(), 
"http://localhost:8080/archiva/rss/new_versions_"; + key + ".xml" );
 
             String description =
                 "These are the new versions of artifact " + "\'" + key + "\'" 
+ " in the repository: \n" +
-                    StringUtils.replace( ( (String) artifactsMap.get( key ) ), 
"|", "\n" );
+                    ( (String) artifactsMap.get( key ) );
 
             entry.setDescription( description );
             entries.add( entry );
 
-            generateFeed( "new_versions_" + repoId + "_" + key + ".xml", 
NEW_VERSIONS_OF_ARTIFACT + "\'" + key + "\'",
-                          "http://localhost:8080/archiva/repository/"; + repoId 
+ "/" + artifactPath,
+            generateFeed( "new_versions_" + key + ".xml", 
NEW_VERSIONS_OF_ARTIFACT + "\'" + key + "\'",
+                          "http://localhost:8080/archiva/rss/new_versions_"; + 
key + ".xml",
                           "New versions of artifact " + "\'" + key + "\' found 
in repository " + "\'" + repoId + "\'" +
                               " during repository scan.", entries );
         }
@@ -148,7 +152,7 @@
             String value = (String) artifactsMap.get( key );
             if ( value != null )
             {
-                value = value + "|" + id;
+                value = value + " | " + id;
             }
             else
             {
@@ -160,16 +164,11 @@
         return artifactsMap;
     }
 
-    private String getArtifactPath( String key )
-    {
-        return StringUtils.replace( StringUtils.replace( key, ".", "/" ), ":", 
"/" );
-    }
-    
     public RssFeedGenerator getGenerator()
     {
         return generator;
     }
-    
+
     public void setGenerator( RssFeedGenerator generator )
     {
         this.generator = generator;

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java?rev=645576&r1=645575&r2=645576&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java
 Mon Apr  7 08:50:57 2008
@@ -93,16 +93,16 @@
         File outputFile = new File( rssDirectory, 
"new_artifacts_test-repo.xml" );        
         assertTrue( outputFile.exists() );
         
-        outputFile = new File( rssDirectory, 
"new_versions_test-repo_org.apache.archiva:artifact-one.xml" );        
+        outputFile = new File( rssDirectory, 
"new_versions_org.apache.archiva:artifact-one.xml" );        
         assertTrue( outputFile.exists() );
         
-        outputFile = new File( rssDirectory, 
"new_versions_test-repo_org.apache.archiva:artifact-two.xml" );        
+        outputFile = new File( rssDirectory, 
"new_versions_org.apache.archiva:artifact-two.xml" );        
         assertTrue( outputFile.exists() );
         
-        outputFile = new File( rssDirectory, 
"new_versions_test-repo_org.apache.archiva:artifact-three.xml" );        
+        outputFile = new File( rssDirectory, 
"new_versions_org.apache.archiva:artifact-three.xml" );        
         assertTrue( outputFile.exists() );
         
-        outputFile = new File( rssDirectory, 
"new_versions_test-repo_org.apache.archiva:artifact-four.xml" );        
+        outputFile = new File( rssDirectory, 
"new_versions_org.apache.archiva:artifact-four.xml" );        
         assertTrue( outputFile.exists() );
     }
 }

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp?rev=645576&r1=645575&r2=645576&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp
 Mon Apr  7 08:50:57 2008
@@ -87,6 +87,10 @@
       Delete
     </ww:a>
   </redback:ifAnyAuthorized>
+  <c:url var="rssFeedIconUrl" value="/images/icons/rss-feed.png"/>
+  <a href="/archiva/rss/new_artifacts_${repository.id}.xml">
+       <img src="${rssFeedIconUrl}" />
+  </a>
 </div>
 
 <div style="float: left">

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/browse.jsp
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/browse.jsp?rev=645576&r1=645575&r2=645576&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/browse.jsp
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/browse.jsp
 Mon Apr  7 08:50:57 2008
@@ -62,14 +62,20 @@
     <div id="nameColumn">
       <h2>Artifacts</h2>
       <ul>
+        <c:url var="rssFeedIconUrl" value="/images/icons/rss-feed.png"/>
         <c:forEach items="${results.artifacts}" var="artifactId">
           <c:set var="url">
             <ww:url action="browseArtifact" namespace="/">
               <ww:param name="groupId" 
value="%{'${results.selectedGroupId}'}"/>
               <ww:param name="artifactId" value="%{'${artifactId}'}"/>
             </ww:url>
-          </c:set>
-          <li><a href="${url}">${artifactId}/</a></li>
+          </c:set>          
+          <li>
+          <a href="${url}">${artifactId}/</a>
+          <a href="/archiva/rss/new_versions_${groupId}:${artifactId}.xml">
+               <img src="${rssFeedIconUrl}" />
+         </a>
+         </li>    
         </c:forEach>
       </ul>
     </div>

Added: 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/rss/rss.xml
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/rss/rss.xml?rev=645576&view=auto
==============================================================================
    (empty)

Modified: archiva/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/archiva/trunk/pom.xml?rev=645576&r1=645575&r2=645576&view=diff
==============================================================================
--- archiva/trunk/pom.xml (original)
+++ archiva/trunk/pom.xml Mon Apr  7 08:50:57 2008
@@ -342,6 +342,11 @@
         <version>1.1-SNAPSHOT</version>
       </dependency>
       <dependency>
+        <groupId>org.apache.archiva</groupId>
+        <artifactId>archiva-rss</artifactId>
+        <version>1.1-SNAPSHOT</version>
+      </dependency>
+      <dependency>
         <groupId>org.codehaus.plexus</groupId>
         <artifactId>plexus-spring</artifactId>
         <version>1.0-SNAPSHOT</version>


Reply via email to