我正在尝试使用mercurial将我的Maven生成的网站部署到googlecode项目。 当我做的时候
mvn site:deploy
我收到传输错误:org.apache.maven.scm.NoSuchCommandScmException:没有这样的命令'list'。
就像我试图做一个“svn列表”一样,即使我使用的是mercurial。
在我的pom中我有maven旅行车和mercurial设置(我认为正确):
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>
答案 0 :(得分:5)
偶然发现这个问题并认为我会为其他人提供答案,因为有关如何执行此操作的文档很少:
很长一段时间以来,我已成功在使用Mercurial的Google Code存储库中托管我的网站。它运作良好,我的问题很少
首先,您必须转到您的项目,选项卡“管理”,子选项卡“源”并创建一个名为“站点”的新存储库。然后,你必须提交并推送至少一个文件,方便地称为“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编码的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网站。
答案 1 :(得分:0)
site:deploy使用scp或文件协议将站点部署到服务器(see here)。我按照正常的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).
答案 2 :(得分:0)
首先,我尝试了TheLQ的答案,甚至投票赞成那个(上图),因为它适用于简单的项目,特别是如果你还将maagon-scm和wagon-ssh依赖项添加到maven-site-plugin并更新最新版本的所有版本;)虽然我有一个问题,但是有一个多模块项目:每个子模块的站点都会覆盖以前推送的内容而不是嵌套它们(与mvn deploy相同的问题,即直接部署到Hg托管远程maven仓库不会创建正确的文件夹层次结构)。
因此,这是一个替代解决方案,它也减少了对远程存储库的提交(但是,它需要一些手动工作)。
首先,转到您的Google代码项目,https://code.google.com/p/MYPROJECT,标签“管理”,“来源”并创建一个名为“site”的新存储库(或者您希望如何调用它)。然后,您必须提交并推送至少一个文件,方便地称为“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来实际部署站点内容(我不会执行site-deploy);相反,将使用mvn site site:stage(见下文)。此外,您不必触摸settings.xml(〜/ .m2 / on * nix系统中的那个)。
第三,只需将远程('site')存储库克隆到本地计算机(目标目录可以在父项目的目录下以及其他任何地方 - 只需cd到THAT_DIR你想要的地方):
cd THAT_DIR
hg clone https://USERNAME@code.google.com/p/MYPROJECT.site/
注意:如果它存在,则不必再次克隆,只需执行hg pull,hg update(可选择使用hg rm *和commit删除旧内容)。您也可以使用例如免费的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/
处的来源和更改完成。