 ------
 Remote Repositories
 ------
 Franz Allan Valencia See
 ------
 July 2006
 ------

~~ Copyright 2006 The Apache Software Foundation.
~~
~~ Licensed 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.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/guides/mini/guide-apt-format.html

Specifying the Remote Repositories

 To use an archetype found in a remote repository, use the 
 <<<remoteRepositories>>> property / parameter. 
 
+------+
mvn archetype:create 
  -DgroupId=[your group id]
  -DartifactId=[your artifact id]
  -DarchetypeGroupId=[group id of the remote archetype]
  -DarchetypeArtifactId=[artifact id of the remote archetype]
  -DarchetypeVersion=[version of the remote archetype]
  -DremoteRepositories=[urls of your remote repositories]
+------+

 For example, if you want to use a 
 <<<remote.archetype.gid:remote-archetype-aid:1.0>>>
 to create a <<<your.proj.gid:your-proj-aid project>>> and that archetype 
 is located at <<<http://remote.archetypes.url>>>, then your maven command 
 would be
 
+------+
mvn archetype:create                                                    \
  -DgroupId=your.proj.gid                                               \
  -DartifactId=your-proj-aid                                            \
  -DarchetypeGroupId=remote.archetype.gid                               \
  -DarchetypeArtifactId=remote-archetype-aid                            \
  -DarchetypeVersion=1.0                                                \
  -DremoteRepositories=http://remote.archetypes.url                     
+------+

 Moreover, you can specify several remote repositories by using a comma (,).
 
+------+
mvn archetype:create                                                    \
  -DgroupId=your.proj.gid                                               \
  -DartifactId=your-proj-aid                                            \
  -DarchetypeGroupId=remote.archetype.gid                               \
  -DarchetypeArtifactId=remote-archetype-aid                            \
  -DarchetypeVersion=1.0                                                \
  -DremoteRepositories=http://remote.archetypes.url,http://another.url  
+------+

 Furthermore, you can specify your remote repositories through a parent pom.
 
+------+
<project>
  [...]
  <packaging>pom</packaging>
  [...]
  <repositories>
    <repository>
      [...]
      <id> [remote repository id] </id>
      <url> [remote repository's url] </url>
      [...]
    </repository>
  </repositories>
</project>
+------+
