4

Mercurial を使用して、Maven で生成されたサイトを Googlecode プロジェクトにデプロイしようとしています。私がするとき

mvn site:deploy

Transfer error: org.apache.maven.scm.NoSuchCommandScmException: No such command 'list' が発生します。

水銀を使用しているにもかかわらず、「svnリスト」を実行しようとしているようなものです。

私のpomには、maven wagonとmercurialのセットアップがあります(私は正しいと思います):

org.apache.maven.wagon wagon-scm 1.0-beta-6 org.apache.maven.scm maven-scm-provider-hg 1.4

次に、サイトのデプロイ用に別のmercurialリポジトリがあります:

   <distributionManagement>
  <site>
   <id>googlecode</id>
   <name>googlecode site</name>
   <url>scm:hg:${project.site.scm}/</url>
  </site>
   </distributionManagement>

私のsettings.xmlには次のものがあります:

  <servers>
  <server>
    <id>googlecode</id>
    <username>...</username>
    <password>...</password>
  </server>
  </servers>
4

3 に答える 3

5

この質問に出くわし、これを行う方法のドキュメントがまばらであるため、他の人に答えを提供すると思いました:

かなり長い間、Mercurial を使用する Google Code リポジトリで自分の Web サイトをホストすることに成功しています。それはうまく機能し、問題はほとんどありませんでした

まず、プロジェクトに移動し、「管理」タブ、「ソース」サブタブを開き、「サイト」という名前の新しいリポジトリを作成する必要があります。次に、SCM プラグインによって呼び出される「hg locate」が完全に空のリポジトリで失敗するため、便宜上「index.html」と呼ばれる少なくとも 1 つのファイルをコミットしてそのリポジトリにプッシュする必要があります。

http://site.MYREPO.googlecode.com/hgに展開する POM にこれがあります

<build>
    <plugins>
        ...
        <!--Deploy site with Mercurial (Hg)-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <version>3.0-beta-3</version>
            <dependencies>
                <dependency>
                    <groupId>org.apache.maven.scm</groupId>
                    <artifactId>maven-scm-api</artifactId>
                    <version>1.5</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.maven.scm</groupId>
                    <artifactId>maven-scm-provider-hg</artifactId>
                    <version>1.5</version>
                </dependency>
            </dependencies>
        </plugin>
        ...
    </plugins>
</build>

<!--
    Distribution
-->
<distributionManagement>
    <!--Site deploy repository-->
    <site>
        <id>MYREPO.googlecode.com</id>
        <url>scm:hg:https://site.MYREPO.googlecode.com/hg</url>
    </site>
</distributionManagement>

次に、Maven にユーザー名とパスワードを伝える必要があるため、これを Mavensettings.xmlファイルに追加します (Mercurial は通常通りチョークするため、@ 文字は HTML エンコードされていることに注意してください) 。

<settings>
    <servers>
        <server>
            <id>MYREPO.googlecode.com</id>
            <username>MYEMAIL%40gmail.com</username>
            <password>MYPASSWORD</password>
        </server>
    </servers>
</settings>

これmvn clean site site:deployで、http: //site.MYREPO.googlecode.com/hg/index.html にアクセスして、完全な Maven サイトを取得できます。

于 2011-06-21T15:57:55.010 に答える
0

site:deployは、サーバーにサイトをデプロイするためにscpまたはfileプロトコルを使用します(ここを参照)。これを通常のsshライン(authorized_keysなど)に沿って構成します。そして、pomには線に沿って何かがあります:

  <!-- The location for generating the website. -->
  <distributionManagement>
    <site>
      <id>website</id>
      <url>scp://username@server.com/path/to/deploy/directory/</url>
    </site>
  </distributionManagement>

ターゲット/サイトディレクトリからすべてを取得し、定義された宛先にコピーします。ただし、欠点は、デプロイしたものが実際にバージョン管理システムにチェックインされていることを確認するのは私次第であるということです。すなわち:

hg push (use mercurial directly to push my changes to other developers).
mvn site:deploy (deploys from my local machine using scp).
于 2010-10-02T11:29:17.113 に答える
0

まず第一に、私は TheLQ の回答を試し、その回答 (上記) に投票しました。これは単純なプロジェクトで機能するためです。特に、maven-site-plugin に wagon-scm と wagon-ssh の依存関係を追加し、すべてのバージョンを最新;)マルチモジュールプロジェクトでは問題がありました:各サブモジュールのサイトは、それらをネストするのではなく、以前にプッシュされたコンテンツを上書きします(mvn deployと同じ問題、つまり、Hg管理のリモートmavenリポジトリに直接デプロイしても作成されません)正しいフォルダ階層)。

したがって、リモート リポジトリへのコミットが少なくなる代替ソリューションを次に示します (ただし、多少の手作業が必要です)。

まず、Google Code プロジェクトhttps://code.google.com/p/MYPROJECTに移動し、[管理] タブの [ソース] タブで、たとえば「サイト」(またはお好みの方法) という新しいリポジトリを作成します。と呼びます)。次に、「index.html」という便利な名前のファイルを少なくとも 1 つコミットして、そのリポジトリにプッシュする必要があります。

次に、親プロジェクトの pom.xml (のみ) に以下を含めます。

<distributionManagement>
<!-- ... other content ...-->
    <site>
        <id>MYPROJECT.googlecode.com</id>
        <name>MYPROJECT auto-generated site</name>
        <url>http://site.MYPROJECT.googlecode.com/hg</url>
    </site>
</distributionManagement>

そしてまた -

<url>http://site.MYPROJECT.googlecode.com/hg</url>

注: はい、「https:」ではなく「http:」です。私の例では、サイトのコンテンツを実際にデプロイするために Maven が URL を使用することはありません (site-deploy を実行するつもりはありません)。代わりに、mvn サイトの site:stage を使用します (以下を参照)。また、settings.xml (*nix システムでは ~/.m2/ にあるもの) に触れる必要はありません。

3 番目に、リモート (「サイト」) リポジトリをローカル マシンにクローンするだけです (ターゲット ディレクトリは、親プロジェクトのディレクトリの下でも、他のディレクトリの下でもかまいません。目的の THAT_DIR に cd するだけです)。

cd THAT_DIR
hg clone https://USERNAME@code.google.com/p/MYPROJECT.site/

注: 存在する場合は、再度複製する必要はありません。hg pull、hg update を実行するだけです (必要に応じて、hg rm * を使用して古いコンテンツを削除し、コミットします)。コンソールの代わりに無料の SourceTree ソフトウェアなどを使用することもできます。

次に、プロジェクトのルートから、通常どおりに実行します (以前に行った場合は、「クリーン、インストール」の目標をスキップします。私は Maven 3.0.5 を使用しました)。

mvn clean install site site:stage -DstagingDirectory=FullPathTo/MYPROJECT.site

最後に、クローン/ステージ ディレクトリ THAT_DIR/MYPROJECT.site に切り替えて、Web サイトをローカルでテストし (ブラウザーで index.html を開きます)、満足する場合は次のようにします。

hg add *
hg commit -m "re-generated MYPROJECT"
hg push

http://site.MYREPO.googlecode.com/hg/index.htmlで確認し、 https://code.google.com/p/MYPROJECT.site/でソースと変更を確認してください。

終わり。

于 2013-09-23T22:45:57.643 に答える