Como posso implantar artefatos de uma compilação Maven no SourceForge File Release System?
-
08-06-2019 - |
Pergunta
Estou usando o SourceForge para alguns projetos de código aberto e quero automatizar a implantação de versões no sistema de liberação de arquivos do SourceForge.Eu uso o Maven para minhas compilações e o mecanismo de implantação SFTP padrão parece não funcionar, a menos que você faça algum trabalho de preparação manual.Encontrei algumas postagens antigas em outros fóruns sugerindo que a única abordagem é escrever um Wagon especificamente para o SourceForge.
Alguém teve alguma experiência recente com isso?
Solução
Não consigo testar para confirmar, mas acredito que seja possível sem escrever nenhum plugin.
Você pode implantar no SourceForge usando SCP, e o maven-deploy-plugin pode ser configurado para usar SCP então deve funcionar.Você também pode implantar seu site para SourceForge através do SCP.
Você configuraria o servidor SourceForge em seu settings.xml para usar um nome de usuário "combinado" com um separador de vírgula.Com estas credenciais:
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
O elemento do servidor ficaria assim:
<server>
<id>sourceforge</id>
<username>foo,bar</username>
<password>secret</password>
</server>
E a seção DistributionManagement no seu POM ficaria assim:
<!-- 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>
Finalmente, declare que ssh-external deve ser usado:
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh-external</artifactId>
<version>1.0-alpha-5</version>
</extension>
</extensions>
</build>
Se isso não funcionar, você poderá usar a abordagem recomendada na referência do site acima, ou seja,crie um shell em shell.sourceforge.net com seu nome de usuário e grupo de projeto:
ssh -t <username>,<project name>@shell.sf.net create
Em seguida, use shell.sourceforge.net (em vez de web.sourceforge.net) no URL do seu site na seção diestributionManagement:
<url>scp://shell.sourceforge.net/home/frs/project/P/PR/PROJECT_UNIX_NAME/</url>
Outras dicas
Enviei um exemplo para sourceforge.net em: http://sf-mvn-plugins.sourceforge.net/example-1jar-thinlet/
Você pode conferir via svn - para ver como usar plug-ins para upload e download e para a área do sistema de arquivos sourceforge.net e o site.
Os principais pontos para fazer upload são usar sftp:
Adicione este código semelhante ao seu 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>
Adicione código semelhante a 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>
O principal ponto para download é usar o plugin wagon-http-sourceforge maven - veja em:sf-mvn-plugins.sourceforge.net/wagon-http-sourceforge/FAQ.html
Adicione o seguinte código ao seu 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>
Parece que vou ter que escrever isso sozinho.
Depois de tentar isso várias vezes, finalmente consegui fazer funcionar - com sftp não scp.Isso deve funcionar em uma caixa Unix (ou Mac) - não tenho certeza sobre clientes SFTP para Windoze.Estou usando o mvn versão 2.2.0 e acho que não tenho nenhum plugin especial instalado.Isso implanta os vários pacotes mvn na seção Arquivos da página do meu projeto.
Você precisará alterar o seguinte em suas configurações para que funcione:
- usuário - substitua pelo seu nome de usuário do sourceforce
- segredo - substitua pela sua senha
- ormlite - substitua pelo nome do seu projeto
- /o/or/ -- substitua pelo primeiro caractere e pelos 2 primeiros caracteres do nome do seu projeto
No meu arquivo $HOME/.m2/settings.xml, tenho o seguinte para o servidor SF:
<server>
<id>sourceforge</id>
<password>secret</password>
<filePermissions>775</filePermissions>
<directoryPermissions>775</directoryPermissions>
</server>
Não especifico o nome de usuário no arquivo settings.xml porque precisa ser nome de usuário, projeto e quero implantar vários pacotes no SF.Então, no meu arquivo pom.xml do pacote ormlite, tenho o seguinte:
<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>
Obviamente, os sufixos dos diretórios /releases e /snapshots podem ser alterados dependendo da hierarquia de arquivos.
Onde tim = usuário e webmacro = projeto
URL scp não funciona:
scp://timp,webmacro@shell.sourceforge.net:/home/groups/w/we/webmacro/htdocs/maven2/
URL sftp funciona:
sftp://timp,webmacro@web.sourceforge.net:/home/groups/w/we/webmacro/htdocs/maven2
ou para artefatos de lançamento do projeto:
sftp://timp,webmacro@web.sourceforge.net:/home/frs/project/w/we/webmacro/releases
scp funcionará em shell.sourceforge.net, mas você deve criar o shell antes de usar com
ssh -t timp,webmacro@shell.sourceforge.net create
Isso realmente não foi tão difícil.Primeiro eu tinha o mvn site:deploy funcionando seguindo as instruções em este site do sourceforge.Basicamente você inicia o shell do sourceforge com
ssh -t user,project@shell.sourceforge.net create
Isso criará o shell no final com uma pasta montada no seu projeto em um caminho como (dependendo do nome do seu projeto):
/home/groups/c/ch/chex4j/
Nesse shell, no servidor sourceforge, criei uma pasta para meu repositório na pasta apache do projeto "htdocs" com
mkdir /home/groups/c/ch/chex4j/htdocs/maven2
No meu settings.xml eu defino o nome de usuário e a senha desse servidor shell para que o maven possa fazer login:
<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>
No pom.xml você só precisa da configuração da seção distibutionManagement para nomear o servidor pelo ID para o qual você definiu a senha em seu arquivo de configurações:
<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>
Lá, a entrada do repositório é aquela para o comando mvn deploy e a entrada do site é para o comando mvn site:deploy.Então tudo o que preciso fazer é iniciar a conexão shell para abrir o lado do servidor e, no meu lado local, basta executar:
mvn deploy
que carrega o jar, pom e fontes e similares no meu site de projetos do sourceforge.Se você tentar acessar a pasta /maven2 no site do seu projeto, sourceforge, informe que a listagem de diretórios está desativada por padrão e como corrigi-la.Para fazer isso no shell do servidor, você cria um arquivo .htaccess em sua pasta htdocs/maven2 contendo as seguintes opções do Apache
Options +Indexes
Então bingo, você tem um repositório maven que se parece com:
http://chex4j.sourceforge.net/maven2/net/sf/chex4j/chex4j-core/1.0.0/
Seu shell sf.net é desligado após algumas horas para não consumir recursos;então você executa o "ssh -t ...create" quando desejar implantar o site ou seus artefatos de construção.
Você pode navegar por todo o código do meu projeto maven no sourceforge para ver minhas configurações de trabalho:
http://chex4j.svn.sourceforge.net/viewvc/chex4j/branches/1.0.x/chex4j-core/
URL SCP faz trabalhar.Mas não use ":" após o nome do servidor.MVN tenta ler o seguinte teste como número inteiro (número da porta).
Você não precisa estabelecer túneis como o simbo1905 fez.
O plug-in Maven SourceForge não funciona com o Maven 2.Também acredito que este plug-in usa FTP que não é mais suportado.
eu achei aquilo CruiseControl pode fazer upload de versões para SFEE e também funciona com Maven e Maven2