Install From Remote Repo

 First, configure your settings.xml file to point to your repo. You may choose to enter the public snapshot repo
 below or to enter your own repo that hosts the NMaven VS installer.

+----+
  <profiles>
    <profile>
      <id>apache.snapshots</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <repositories>
        <repository>
          <id>org.apache</id>
          <name>Maven Snapshots</name>
          <url>http://people.apache.org/repo/m2-snapshot-repository</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>org.apache</id>
          <name>Maven Plugin Snapshots</name>
          <url>http://people.apache.org/repo/m2-snapshot-repository</url>
          <releases>
            <enabled>false</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
+----+

 Due to a bug in Maven, if you are remotely resolving a plugin that doesn't exist in central, you will need to install
 from a directory containing a pom.xml file. So if you have a pom.xml handy, goto that directory from the command line.
 If not, you will need to download the {{{pom.xml}pom.xml}} and goto to the download directory from the command line.
 Now type the following from the command line:

+----+
 mvn org.apache.maven.dotnet.plugins:maven-vsinstaller-plugin:install
+----+

 This will download the plugin and all of its dependencies.