you'll need to configure your new localRepository in 
$MAVEN_HOME/conf/settings.xml
  <!-- 
  localRepository
   | The path to the local repository maven will use to store artifacts.
   | Default: ~/.m2/repository
  <localRepository>/path/to/local/repo</localRepository/>
  -->
  <!-- localRepository>F:\Maven-plugin</localRepository -->

also config $MAVEN_HOME/conf/plugin-registry.xml to include the 
localRepostoryPath as defined 
<localRepositoryPath>F:\maven-plugin</localRepositoryPath>
<plugins>

then your pom.xml plugins should have localRepositoryPath defined in 
<configuration>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-invoker-plugin</artifactId>
            <version>1.2</version>
            <configuration>
              <projectsDirectory>src/it</projectsDirectory>
              <pomIncludes>
                <pomInclude>**/**/pom.xml</pomInclude>
              </pomIncludes>
              
<localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath>

Here is a java TestCase class which will test the functionality
public class DefaultArtifactTest extends TestCase
{
    private DefaultArtifact artifact;
    private String groupId = "groupid", artifactId = "artifactId", version = 
"1.0", scope = "scope", type = "type",classifier = "classifier";
    private VersionRange versionRange;
    private ArtifactHandlerMock artifactHandler;
    protected void setUp() throws Exception
    {
        super.setUp();
        artifactHandler = new ArtifactHandlerMock();
        versionRange = VersionRange.createFromVersion( version );
//notice how the DefaultArtifact is created 
        artifact = new DefaultArtifact( groupId, artifactId, versionRange, 
scope, type, classifier, artifactHandler );
    }

    public void testToString()
    {
      assertEquals( groupId + ":" + artifactId + ":" + type + ":" + classifier 
+ ":" + version + ":" + scope,
      artifact.toString() );
    }
//TestString method is the most pertinent to your question on how to deliver 
the artifact name
//groupId + ":" + artifactId + ":" + type + ":" + classifier + ":" + version + 
":" + //scope
    }
}

and the applicable package org.apache.maven.artifact.DefaultArtifact
    public DefaultArtifact( String groupId, String artifactId, VersionRange 
versionRange, String scope, String type,String classifier, ArtifactHandler 
artifactHandler )
    {
        this( groupId, artifactId, versionRange, scope, type, classifier, 
artifactHandler, false );
    }

which calls to this giant mutator (same params as before but with optional)
public DefaultArtifact( String groupId, String artifactId, VersionRange 
versionRange, String scope, String type,String classifier, ArtifactHandler 
artifactHandler, boolean optional )
 {
        this.groupId = groupId;
        this.artifactId = artifactId;
        this.versionRange = versionRange;       
        selectVersionFromNewRangeIfAvailable();
        this.artifactHandler = artifactHandler;
        this.scope = scope;
        this.type = type;
        if ( classifier == null )
        {
            classifier = artifactHandler.getClassifier();
        }
        this.classifier = classifier;
        this.optional = optional;
        validateIdentity();
}
//and of course the name delivered by toString() which you would modify
   public String toString() {
        StringBuffer sb = new StringBuffer();
        if ( getGroupId() != null ) {
            sb.append( getGroupId() );
            sb.append( ":" );
        }
        appendArtifactTypeClassifierString( sb );
        sb.append( ":" );
        if ( version != null || baseVersion != null ) {
            sb.append( getBaseVersion() );
        }
        else {
            sb.append( versionRange.toString() );
        }
        if ( scope != null ) {
            sb.append( ":" );
            sb.append( scope );
        }
        return sb.toString();
    }
//any changes made to directory should be accomodated here
    public void updateVersion( String version, DefaultArtifactRepository 
localRepository )
    {
        setResolvedVersion( version );
        setFile( new File( localRepository.getBasedir(), 
localRepository.pathOf( this ) ) );
    }

the second parameter uses DefaultArtifactRepository class defined here
public class DefaultArtifactRepository
    extends Repository
    implements ArtifactRepository
{
    private final ArtifactRepositoryLayout layout;

    private ArtifactRepositoryPolicy snapshots;

    private ArtifactRepositoryPolicy releases;

    private boolean uniqueVersion;

    private boolean blacklisted;

    /**
     * Create a local repository or a test repository.
     *
     * @param id     the unique identifier of the repository
     * @param url    the URL of the repository
     * @param layout the layout of the repository
     */
    public DefaultArtifactRepository( String id,
                                      String url,
                                      ArtifactRepositoryLayout layout )
    {
        this( id, url, layout, null, null );
    }

    /**
     * Create a remote deployment repository.
     *
     * @param id            the unique identifier of the repository
     * @param url           the URL of the repository
     * @param layout        the layout of the repository
     * @param uniqueVersion whether to assign each snapshot a unique version
     */
    public DefaultArtifactRepository( String id,
                                      String url,
                                      ArtifactRepositoryLayout layout,
                                      boolean uniqueVersion )
    {
        super( id, url );
        this.layout = layout;
        this.uniqueVersion = uniqueVersion;
    }

    /**
     * Create a remote download repository.
     *
     * @param id        the unique identifier of the repository
     * @param url       the URL of the repository
     * @param layout    the layout of the repository
     * @param snapshots the policies to use for snapshots
     * @param releases  the policies to use for releases
     */
    public DefaultArtifactRepository( String id,
                                      String url,
                                      ArtifactRepositoryLayout layout,
                                      ArtifactRepositoryPolicy snapshots,
                                      ArtifactRepositoryPolicy releases )
    {
        super( id, url );
        this.layout = layout;
        if ( snapshots == null )
        {
            snapshots = new ArtifactRepositoryPolicy( true, 
ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS,
                ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE );
        }
        this.snapshots = snapshots;

        if ( releases == null )
        {
            releases = new ArtifactRepositoryPolicy( true, 
ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS,
                ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE );
        }
        this.releases = releases;
    }
    public String pathOf( Artifact artifact )
    {
        return layout.pathOf( artifact );
    }
    public String pathOfRemoteRepositoryMetadata( ArtifactMetadata 
artifactMetadata )
    {
        return layout.pathOfRemoteRepositoryMetadata( artifactMetadata );
    }
    public String pathOfLocalRepositoryMetadata( ProjectArtifactMetadata 
metadata,
                                                 ArtifactRepository repository )
    {
        return layout.pathOfLocalRepositoryMetadata( metadata, repository );
    }
    public ArtifactRepositoryLayout getLayout()
    {
        return layout;
    }
    public ArtifactRepositoryPolicy getSnapshots()
    {
        return snapshots;
    }
    public void setReleases( ArtifactRepositoryPolicy releases )
    {
        this.releases = releases;
    }
    public ArtifactRepositoryPolicy getReleases()
    {
        return releases;
    }
    public String getKey()
    {
        return getId();
    }
    public boolean isUniqueVersion()
    {
        return uniqueVersion;
    }
    public boolean isBlacklisted()
    {
        return blacklisted;
    }
    public void setBlacklisted( boolean blacklisted )
    {
        this.blacklisted = blacklisted;
    }
}

finally the layout calls pathOfLocalRepositoryMetadata( metadata, repository ) 
where metadata is
public class ProjectArtifactMetadata
    extends AbstractArtifactMetadata
{
    private final File file;

    public ProjectArtifactMetadata( Artifact artifact )
    {
        this( artifact, null );
    }

    public ProjectArtifactMetadata( Artifact artifact,
                                    File file )
    {
        super( artifact );
        this.file = file;
    }

    public String getRemoteFilename()
    {
        return getFilename();
    }

    public String getLocalFilename( ArtifactRepository repository )
    {
        return getFilename();
    }

    private String getFilename()
    {
        return getArtifactId() + "-" + artifact.getVersion() + ".pom";
    }

    public void storeInLocalRepository( ArtifactRepository localRepository,
                                        ArtifactRepository remoteRepository )
        throws RepositoryMetadataStoreException
    {
        File destination = new File( localRepository.getBasedir(),
                                     
localRepository.pathOfLocalRepositoryMetadata( this, remoteRepository ) );

        // 
----------------------------------------------------------------------------
        // I'm fully aware that the file could just be moved using File.rename 
but
        // there are bugs in various JVM that have problems doing this across
        // different filesystem. So we'll incur the small hit to actually copy
        // here and be safe. jvz.
        // 
----------------------------------------------------------------------------
        try
        {
            FileUtils.copyFile( file, destination );
        }
        catch ( IOException e )
        {
            throw new RepositoryMetadataStoreException( "Error copying POM to 
the local repository.", e );
        }
    }

    public String toString()
    {
        return "project information for " + artifact.getArtifactId() + " " + 
artifact.getVersion();
    }

    public boolean storedInArtifactVersionDirectory()
    {
        return true;
    }

    public String getBaseVersion()
    {
        return artifact.getBaseVersion();
    }

    public Object getKey()
    {
        return "project " + artifact.getGroupId() + ":" + 
artifact.getArtifactId();
    }

    public void merge( ArtifactMetadata metadata )
    {
        ProjectArtifactMetadata m = (ProjectArtifactMetadata) metadata;
        if ( !m.file.equals( file ) )
        {
            throw new IllegalStateException( "Cannot add two different pieces 
of metadata for: " + getKey() );
        }
    }
}

//finally the ArtifactRepositoryLayout which is nothing more than an interface 
skeleton
/** @author jdcasey */
public interface ArtifactRepositoryLayout
{
    String ROLE = ArtifactRepositoryLayout.class.getName();

    String pathOf( Artifact artifact );

    String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata,
                                          ArtifactRepository repository );

    String pathOfRemoteRepositoryMetadata( ArtifactMetadata metadata );
}

HTH
Martin Gainty 
______________________________________________ 
Jogi és Bizalmassági kinyilatkoztatás/Verzicht und 
Vertraulichkeitanmerkung/Note de déni et de confidentialité
 Ez az
üzenet bizalmas.  Ha nem ön az akinek szánva volt, akkor kérjük, hogy
jelentse azt nekünk vissza. Semmiféle továbbítása vagy másolatának
készítése nem megengedett.  Ez az üzenet csak ismeret cserét szolgál és
semmiféle jogi alkalmazhatósága sincs.  Mivel az electronikus üzenetek
könnyen megváltoztathatóak, ezért minket semmi felelöség nem terhelhet
ezen üzenet tartalma miatt.

Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene Empfaenger 
sein, so bitten wir hoeflich um eine Mitteilung. Jede unbefugte Weiterleitung 
oder Fertigung einer Kopie ist unzulaessig. Diese Nachricht dient lediglich dem 
Austausch von Informationen und entfaltet keine rechtliche Bindungswirkung. 
Aufgrund der leichten Manipulierbarkeit von E-Mails koennen wir keine Haftung 
fuer den Inhalt uebernehmen.
Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le 
destinataire prévu, nous te demandons avec bonté que pour satisfaire informez 
l'expéditeur. N'importe quelle diffusion non autorisée ou la copie de ceci est 
interdite. Ce message sert à l'information seulement et n'aura pas n'importe 
quel effet légalement obligatoire. Étant donné que les email peuvent facilement 
être sujets à la manipulation, nous ne pouvons accepter aucune responsabilité 
pour le contenu fourni.




> Date: Fri, 15 May 2009 12:39:15 -0700
> From: [email protected]
> To: [email protected]
> Subject: Re: [maven 2] assembly: repository from multiple modules
> 
> 
> Any update to this?  I've tried a bunch of combinations.  I think at this
> point I'm going to try and hack the latest source to meet my needs.
> 
> ~ David
> 
> 
> Hal Hildebrand-3 wrote:
> > 
> > I have a large, multiple module project that I need to create a repository
> > assembly for.  I have no problems creating the binary, including the
> > dependencies. However, I can't seem to create a repository.  I'm running
> > the
> > assembly in the project's top level pom, of course, but from what I can
> > tell, there seems to be no way to indicated to use all the sub modules -
> > i.e. The only way to create the repository seems to be be placing all the
> > dependencies in the top level pom.  Obviously, this will be a nightmare to
> > maintain.  Also, since the binary assembly seems perfectly capable of
> > including the sub module's binaries and dependencies, it would seem that
> > the
> > repository assembly should be able to do the same.
> > 
> > Falling short of actually creating the repository for one reason or
> > another,
> > if I could get the format of the binary assembly to be identical to the
> > repository layout, that would be sufficient for my needs as I don't need
> > the
> > maven repository metadata.  Right now, I've tried using no outputfile
> > format, with simply a directory - doesn't work.  I've also tried using:
> > ${groupId}/${artifactId} as the directory - kind of works, but now I have
> > .'s instead of /'s in the repository group id directory.
> > 
> > Surely this is possible through some machination or incantation, right?
> > 
> > 
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: [email protected]
> > 
> > 
> > 
> 
> -- 
> View this message in context: 
> http://www.nabble.com/-maven-2--assembly%3A-repository-from-multiple-modules-tp8505848p23566098.html
> Sent from the Maven - Users mailing list archive at Nabble.com.
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 

_________________________________________________________________
Hotmail® has ever-growing storage! Don’t worry about storage limits.
http://windowslive.com/Tutorial/Hotmail/Storage?ocid=TXT_TAGLM_WL_HM_Tutorial_Storage1_052009

Reply via email to