Проблемы с Maven + Mercurial + Site Deploy - PullRequest
4 голосов
/ 30 сентября 2010

Я пытаюсь развернуть сгенерированный Maven сайт в проекте googlecode, используя mercurial.Когда я делаю

mvn site:deploy

, я получаю ошибку передачи: org.apache.maven.scm.NoSuchCommandScmException: нет такой команды 'list'.

Это похоже на попытку сделать svnlist ", хотя я использую Mercurial.

В моем pom у меня есть Maven Wagon и ртутные настройки (я думаю, правильно):

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

Затем для развертывания моего сайта у меня есть отдельный ртутный репозиторий:

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

В моем файле settings.xml Iиметь:

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

Ответы [ 3 ]

5 голосов
/ 21 июня 2011

Наткнулся на этот вопрос и подумал, что я предоставлю ответ кому-либо еще, так как документации о том, как это сделать, немного:

Уже довольно давно я успешно размещаю свой сайт в репозитории Google Code, который использует Mercurial. Это работает хорошо, и у меня было очень мало проблем

Сначала вы должны перейти к своему проекту, вкладке «Администрирование», вложенной вкладке «Источник» и создать новый репозиторий под названием «сайт». Затем вам нужно зафиксировать и отправить по крайней мере один файл, обычно называемый «index.html», в этот репозиторий, потому что «hg locate», который вызывается плагином SCM, завершается ошибкой в ​​совершенно пустых репозиториях.

У меня есть это в моем 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.

0 голосов
/ 24 сентября 2013

Прежде всего, я попробовал ответ TheLQ и даже проголосовал за него (выше), потому что он работает для простых проектов, особенно если вы также добавляете зависимости wagon-scm и wagon-ssh в maven-site-plugin и update все версии до последней;) В случае многомодульного проекта у меня возникла проблема: сайт каждого подмодуля перезаписывает ранее загруженный контент, а не вкладывает его (та же проблема с mvn deploy, т. е. развертыванием непосредственно в управляемом Hg удаленном репозитории maven не создает правильную иерархию папок).

Таким образом, вот альтернативное решение, которое также делает меньше коммитов в удаленный репозиторий (хотя, это требует немного ручной работы).

Сначала перейдите на ваш проект Google Code, вкладку "1005 *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 site site: stage (см. ниже). Кроме того, вам не нужно прикасаться к файлу settings.xml (который находится в ~ / .m2 / в * nix системах).

В-третьих, просто клонируйте удаленный ('site') репозиторий на свой локальный компьютер (целевой каталог может находиться как в директории родительского проекта, так и в любом другом месте - просто перейдите в THAT_DIR там, где вы хотите):

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

Примечание: если он существовал, вам не нужно снова клонировать, просто выполните hg pull, hg update (опционально удалите старый контент, используя hg rm * и commit). Вы также можете использовать, например, бесплатное программное обеспечение SourceTree вместо консоли.

Далее, из корня проектов, делайте как обычно (пропустите цели 'clean, install', если вы уже делали это раньше; я использовал 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/

Готово.

0 голосов
/ 02 октября 2010

site: deploy использует scp или файловый протокол для развертывания сайта на сервере ( см. Здесь ). Я настраиваю это по обычным ssh-линиям (author_keys и т. Д.). А в поме есть что-то вроде:

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

Он берет все из каталога target / site и копирует его в указанное место назначения. Однако недостатком является то, что я должен убедиться, что то, что я развернул, действительно проверено в моей системе контроля версий. то есть:

hg push (use mercurial directly to push my changes to other developers).
mvn site:deploy (deploys from my local machine using scp).
...