Как я могу развернуть артефакты из сборки Maven в системе выпуска файлов SourceForge?
Я использую SourceForge для некоторых проектов с открытым исходным кодом и хочу автоматизировать развертывание выпусков в системе выпуска файлов SourceForge. Я использую Maven для своих сборок, и стандартный механизм развертывания SFTP, похоже, не сработает, если вы не выполните некоторые подготовительные работы вручную. Я сталкивался с некоторыми старыми сообщениями на других форумах, предполагающими, что единственный подход - написать Wagon специально для SourceForge.
У кого-нибудь был недавний опыт с этим?
9 ответов
Я не могу проверить это, чтобы подтвердить, но я считаю, что это возможно без написания каких-либо плагинов.
Вы можете выполнить развертывание в SourceForge с помощью SCP, а подключаемый модуль maven-deploy-plug может быть настроен для использования SCP, поэтому он должен работать. Вы также можете развернуть свой сайт в SourceForge через SCP.
Вы должны настроить сервер SourceForge в файле settings.xml для использования "комбинированного" имени пользователя с разделителем запятых. С этими полномочиями:
SourceForge username: foo
SourceForge user password: secret
SourceForge project name: bar
Path: /home/frs/project/P/PR/PROJECT_UNIX_NAME/
- Substitute your project UNIX name data for /P/PR/PROJECT_UNIX_NAME
Элемент сервера будет выглядеть так:
<server>
<id>sourceforge</id>
<username>foo,bar</username>
<password>secret</password>
</server>
И раздел distributionManagement в вашем POM будет выглядеть так:
<!-- Enabling the use of FTP -->
<distributionManagement>
<repository>
<id>ssh-repository</id>
<url>
scpexe://frs.sourceforge.net:/home/frs/project/P/PR/PROJECT_UNIX_NAME</url>
</repository>
</distributionManagement>
Наконец объявите, что ssh-external должен использоваться:
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh-external</artifactId>
<version>1.0-alpha-5</version>
</extension>
</extensions>
</build>
Если это не сработает, вы можете использовать рекомендуемый подход в приведенной выше ссылке на сайт, то есть создать оболочку на shell.sourceforge.net с вашим именем пользователя и группой проекта:
ssh -t <username>,<project name>@shell.sf.net create
Затем используйте shell.sourceforge.net (вместо web.sourceforge.net) в URL вашего сайта в разделе diestributionManagement:
<url>scp://shell.sourceforge.net/home/frs/project/P/PR/PROJECT_UNIX_NAME/</url>
Я загрузил пример на sourceforge.net по адресу: http://sf-mvn-plugins.sourceforge.net/example-1jar-thinlet/
Вы можете проверить это через svn - чтобы вы могли увидеть, как использовать плагины для загрузки и выгрузки, а также в области файловой системы sourceforge.net и на веб-сайте.
Основные пункты для загрузки - использовать sftp:
Добавьте этот похожий код в ваш pom.xml
<distributionManagement>
<!-- use the following if you're not using a snapshot version. -->
<repository>
<id>sourceforge-sf-mvn-plugins</id>
<name>FRS Area</name>
<uniqueVersion>false</uniqueVersion>
<url>sftp://web.sourceforge.net/home/frs/project/s/sf/sf-mvn-plugins/m2-repo</url>
</repository>
<site>
<id>sourceforge-sf-mvn-plugins</id>
<name>Web Area</name>
<url>
sftp://web.sourceforge.net/home/groups/s/sf/sf-mvn-plugins/htdocs/${artifactId}
</url>
</site>
</distributionManagement>
Добавить аналогичный код в settings.xml
<server>
<id>sourceforge-sf-mvn-plugins-svn</id>
<username>tmichel,sf-mvn-plugins</username>
<password>secret</password>
</server>
<server>
<id>sourceforge-sf-mvn-plugins</id>
<username>user,project</username>
<password>secret</password>
</server>
Основной момент для скачивания - использовать плагин wagon-http-sourceforge maven - см. По адресу: sf-mvn-plugins.sourceforge.net/wagon-http-sourceforge/FAQ.html
Пожалуйста, добавьте следующий код в ваш pom.xml
<repositories>
<repository>
<id>sourceforge-svn</id>
<name>SF Maven Plugin SVN Repository</name>
<url>http://sf-mvn-plugins.svn.sourceforge.net/svnroot/sf-mvn-plugins/_m2-repo/trunk</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>sourceforge-frs</id>
<name>SF Maven Plugin Repository</name>
<url>http://sourceforge.net/projects/sf-mvn-plugins/files/m2-repo</url>
</pluginRepository>
</pluginRepositories>
<build>
<extensions>
<extension>
<groupId>net.sf.maven.plugins</groupId>
<artifactId>wagon-http-sourceforge</artifactId>
<version>0.4</version>
</extension>
</extensions>
:
</build>
Похоже, мне придется написать это самому.
Попробовав это несколько раз, я наконец заставил его работать - с sftp, а не с scp. Это должно работать с Unix Box (или Mac) - я не уверен насчет клиентов sftp для Windoze. Я использую mvn версии 2.2.0 и не думаю, что у меня установлены какие-либо специальные плагины. Это развертывает различные пакеты mvn в разделе "Файлы" на странице моего проекта.
Вам нужно будет изменить следующее в ваших настройках, чтобы заставить его работать:
- user - заменить на свое имя пользователя sourceforce
- секрет - замените свой пароль
- ormlite - заменить на название вашего проекта
- /o/ или / - заменить на первый символ и первые 2 символа вашего проекта
В моем файле $HOME/.m2/settings.xml у меня есть следующее для SF-сервера:
<server>
<id>sourceforge</id>
<password>secret</password>
<filePermissions>775</filePermissions>
<directoryPermissions>775</directoryPermissions>
</server>
Я не указываю имя пользователя в файле settings.xml, потому что это должно быть имя пользователя, проект, и я хочу развернуть несколько пакетов в SF. Затем в моем файле pom.xml для пакета ormlite у меня есть следующее:
<distributionManagement>
<repository>
<id>sourceforge</id>
<name>SourceForge</name>
<url>sftp://user,ormlite@frs.sourceforge.net:/home/frs/project/o/or/ormlite/releases
</url>
</repository>
<snapshotRepository>
<id>sourceforge</id>
<name>SourceForge</name>
<url>sftp://user,ormlite@frs.sourceforge.net:/home/frs/project/o/or/ormlite/snapshots
</url>
</snapshotRepository>
</distributionManagement>
Очевидно, что суффиксы каталогов /release и /snapshots могут быть изменены в зависимости от вашей файловой иерархии.
Это действительно оказалось не так сложно. Сначала у меня был сайт mvn: разверните работающий, следуя инструкциям на этом сайте sourceforge. По сути, вы запускаете оболочку sourceforge с
ssh -t user,project@shell.sourceforge.net create
Это создаст оболочку на их конце с папкой, смонтированной в вашем проекте по пути, например (в зависимости от имени вашего проекта):
/home/groups/c/ch/chex4j/
В этой оболочке я на сервере sourceforge создал папку для своего репозитория в папке apache проекта "htdocs" с
mkdir /home/groups/c/ch/chex4j/htdocs/maven2
В моем файле settings.xml я установил имя пользователя и пароль для этого сервера оболочки, чтобы maven мог войти в систему:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd/">
<servers>
<server>
<id>chex4j.sf.net</id>
<username>me,myproject</username>
<password>password</password>
<filePermissions>775</filePermissions>
<directoryPermissions>775</directoryPermissions>
</server>
</servers>
</settings>
В файле pom.xml вам просто нужно настроить раздел distibutionManagement, чтобы назвать сервер по идентификатору, для которого вы установили пароль в файле настроек:
<distributionManagement>
<site>
<id>chex4j.sf.net</id>
<url>scp://shell.sourceforge.net/home/groups/c/ch/chex4j/htdocs/
</url>
</site>
<repository>
<id>chex4j.sf.net</id>
<name>SourceForge shell repo</name>
<url>scp://shell.sourceforge.net/home/groups/c/ch/chex4j/htdocs/maven2</url>
</repository>
</distributionManagement>
Там запись репозитория - это команда mvn deploy, а запись сайта - команда mvn site: deploy. Затем все, что мне нужно сделать, это запустить соединение оболочки, чтобы вызвать серверную часть, а затем на моей локальной стороне просто запустить:
mvn deploy
который загружает jar, pom и sources и т.п. на мой сайт проектов sourceforge. Если вы попытаетесь открыть папку / maven2 на веб-сайте вашего проекта, sourceforge, пожалуйста, сообщите, что список каталогов по умолчанию отключен и как это исправить. Для этого в оболочке сервера вы создаете файл.htaccess в папке htdocs / maven2, содержащий следующие параметры apache
Options +Indexes
Тогда бинго, у вас есть репозиторий Maven, который выглядит следующим образом:
http://chex4j.sourceforge.net/maven2/net/sf/chex4j/chex4j-core/1.0.0/
Ваша оболочка sf.net отключается через несколько часов, чтобы не занимать ресурсы; поэтому вы запускаете команду "ssh -t ... create", когда хотите развернуть сайт или свои артефакты сборки.
Вы можете просмотреть весь мой код проекта maven в sourceforge, чтобы увидеть мои рабочие настройки:
http://chex4j.svn.sourceforge.net/viewvc/chex4j/branches/1.0.x/chex4j-core/
URL SCP работает. Но не используйте ":" после имени сервера. MVN пытается прочитать следующий тест как целое число (номер порта).
Вам не нужно устанавливать туннели, как это делал simbo1905.
Где timp = пользователь и webmacro = проект
scp url не работает:
scp://timp,webmacro@shell.sourceforge.net:/home/groups/w/we/webmacro/htdocs/maven2/
sftp url работает:
sftp://timp,webmacro@web.sourceforge.net:/home/groups/w/we/webmacro/htdocs/maven2
или для артефактов выпуска проекта:
sftp://timp,webmacro@web.sourceforge.net:/home/frs/project/w/we/webmacro/releases
scp будет работать с shell.sourceforge.net, но вы должны создать оболочку перед использованием
ssh -t timp,webmacro@shell.sourceforge.net create
Плагин Maven SourceForge не работает с Maven 2. Также я считаю, что этот плагин использует FTP, который больше не поддерживается.
Я обнаружил, что CruiseControl может загружать релизы в SFEE, а также работает с Maven и Maven2