4

我正在尝试使用 mercurial 将我的 Maven 生成的站点部署到 googlecode 项目。当我做一个

mvn site:deploy

我收到传输错误:org.apache.maven.scm.NoSuchCommandScmException:没有这样的命令“列表”。

就像它试图做一个“svn 列表”,即使我使用的是 mercurial。

在我的 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 代码存储库中成功地托管我的网站。它运作良好,我遇到的问题很少

首先,您必须转到您的项目,选项卡“管理”,子选项卡“源”并创建一个名为“站点”的新存储库。然后,您必须提交并将至少一个名为“index.html”的文件推送到该存储库,因为 SCM 插件调用的“hg locate”在完全空的存储库上会失败。

我在我的 POM 中有这个部署到http://site.MYREPO.googlecode.com/hg

<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文件中(注意 @ 字符是 HTML 编码的,因为 Mercurial 会正常阻塞它)

<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 或文件协议将站点部署到服务器(请参阅此处)。我沿着正常的 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>

它从目标/站点目录中获取所有内容并将其复制到定义的目标。然而,不利的一面是,由我来确保我所部署的内容实际上被检入到我的版本控制系统中。IE:

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 的答案,甚至投票给了那个答案(上图),因为它适用于简单的项目,特别是如果您还将 wagon-scm 和 wagon-ssh 依赖项添加到 maven-site-plugin 并将所有版本更新为最新的 ;) 虽然我遇到了一个问题,但对于一个多模块项目:每个子模块的站点都会覆盖以前推送的内容而不是嵌套它们(mvn deploy 存在同样的问题,即直接部署到 Hg 托管的远程 maven repo 不会创建正确的文件夹层次结构)。

因此,这是一个替代解决方案,它也减少了对远程存储库的提交(尽管它需要一些手动工作)。

首先,转到您的 Google 代码项目https://code.google.com/p/MYPROJECT,选项卡“管理”、“源”并创建一个名为“站点”的新存储库(或您喜欢的方式)调用它)。然后,您必须提交并推送至少一个文件,方便地称为“index.html”到该存储库。

其次,在父项目的 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>

注意:是的,它是“http:”而不是“https:”;在我的示例中,Maven 不会使用 URL 来实际部署站点内容(我不会执行站点部署);相反,将使用 mvn site site:stage (见下文)。此外,您不必触摸 settings.xml(在 *nix 系统上位于 ~/.m2/ 中的那个)。

第三,只需将远程(“站点”)存储库克隆到您的本地计算机(目标目录可以在父项目的目录下以及其他任何地方 - 只需 cd 到您想要的 THAT_DIR ):

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

最后,切换到 clone/stage 目录,THAT_DIR/MYPROJECT.site,在本地测试网站(在浏览器中打开 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 回答