2010-09-29 49 views
4

我正在尝试将我的Maven生成的站点部署到使用mercurial的googlecode项目中。 当我做了Maven + Mercurial + Site部署问题

mvn site:deploy 

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

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

在我的POM我有行家旅行车和善变的设置(我认为正确):

org.apache.maven.wagon 货车-SCM 1.0-β-6 org.apache。 maven.scm 的maven-SCM提供商-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> 

回答

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的用户名和密码,所以它添加到你的Maven settings.xml文件(注意@字符的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站点。

+0

我得尽快尝试。 – 2011-06-30 20:39:42

0

网站:部署使用SCP或文件协议用于部署网站的服务器(see here)。我沿着正常的ssh行(authorized_keys等)配置它。并且在pom中有一些东西:

<!-- The location for generating the website. --> 
    <distributionManagement> 
    <site> 
     <id>website</id> 
     <url>scp://[email protected]/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). 
+0

那么唯一的问题是,googlecode没有标准的SSH访问,因为他们使用bigtable的一切(我认为)。所以我现在所做的是为站点制作另一个mercurial repo,在本地克隆它,将rsync target/site复制到本地克隆副本,然后执行hg commit,hg push。 – 2010-10-02 13:46:02

0

首先,我尝试了TheLQ的答案,甚至投票赞成那个(上面),因为它适用于简单的项目,尤其是如果您还将wagon-scm和wagon-ssh依赖项添加到maven-site-plugin并且更新所有版本到最新版本;)虽然我有一个问题,但是有一个多模块项目:每个子模块的站点覆盖先前推送的内容而不是嵌套它们(与mvn deploy相同的问题,即直接部署到Hg管理的远程Maven回购不会创建正确的文件夹层次结构)。

因此,这是一个替代解决方案,它也减少了对远程存储库的提交(尽管它需要一些手动工作)。首先,转到您的谷歌代码项目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 :“;在我的例子中,URL不会被Maven用来实际部署网站内容(我不打算执行站点部署);相反,将使用mvn站点站点:阶段(见下文)。此外,您不必触摸settings.xml(位于〜/ .m2/* nix系统中的)。

三,简单地克隆远程(“网站”)存储库到本地计算机(目标目录可以是父项目的目录下以及在其他地方的 - 只是cd到THAT_DIR,你想让它):

cd THAT_DIR 
hg clone https://[email protected]/p/MYPROJECT.site/ 

注意:如果存在,则不必再次克隆,只需执行hg pull,hg update(可选择使用hg rm *和remove提交旧内容)。您也可以使用例如免费的SourceTree软件,而不是控制台。

接下来,从项目的根,也常(跳过“干净安装”如果你前已经做过的目标;我用的Maven 3.0.5):

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

最后,切换到克隆/台目录,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/

完成。