 ------
 Usage
 ------
 Pete Marvin King
 ------
 18 July 2006
 ------
 
Usage

 The scm plugin maps a lot of commands to a variety of scm implementations. But there are only 2 frequently 
 used commands:
  
   * checkin - commit the changes to the remote repository ( scm server ).
  
   * update - updates the local working copy with the one from the remote repository ( scm server ).
   
Configuring SCM 

 Each scm has a different command line invocation to commit the modified sources. Using maven this process is
 simplified by providing a uniform way to do this by letting maven handle the command line translation to perform
 the scm task.

 To configure the scm support for maven you need the scm configuration in your <<<pom.xml>>>.
 
+---------+
  [...]
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>SCM Sample Project</name>
  <url>http://somecompany.com</url>
  <scm>
    <connection>scm:svn:http://somerepository.com/svn_repo/trunk</connection>
    <developerConnection>scm:svn:https://somerepository.com/svn_repo/trunk</developerConnection>
    <url>http://somerepository.com/view.cvs</url>
  </scm>
  [...]
+---------+
 
 Maven will use the information embedded in the scm configuration to determine the command mapping for the scm command.
 The scm configuration url is composed of different information that defines the mapping:
 
+------+
   scm:svn:http://somerepository.com/svn_repo/trunk
   <service name>:<scm implementation>:<repository url>
+------+
 
  Check the {{{http://maven.apache.org/scm/scms-overview.html}maven scm list}} for the list of supported SCMs.
  
Committing and updating changes through Maven

 Assuming that SCM has been configured in the <<<pom.xml>>> and the project directory is managed by a SCM, invoking 
 the checkin goal in the scm will start the commit process for all configured sources in your <<<pom.xml>>>.
 
 <<The files should be added beforehand by an external scm client.>>
 
+-----+ 
  mvn -Dmessage="<commit_log_here>" scm:checkin
+-----+      
 
 for update 
 
+-----+ 
  mvn scm:update
+-----+      

Specifying the scm connection to use

 There two possible scm connections that can be used in the <<<pom.xml>>>, connection and developerConnection.
 
 * connection configuration
 
+-----------+
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-scm-plugin</artifactId>
        <version>1.0-SNAPSHOT</version>
        <configuration>
          <connectionType>connection</connectionType>
        </configuration>
      </plugin>
      [...]
    </plugins
    [...]
  </build>
  [...]
+-----------+  

 * developerConnection configuration
 
+-----------+
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-scm-plugin</artifactId>
        <version>1.0-SNAPSHOT</version>
        <configuration>
          <connectionType>developerConnection</connectionType>
        </configuration>
      </plugin>
      [...]
    </plugins
    [...]
  </build>
  [...]
+-----------+   
 
 
Related Links

   {{{http://docs.codehaus.org/display/SCM/SCM+Matrix}SCM Plugin Matrix}} 
 