java - ¿Cómo puedo implementar artefactos de una construcción Maven en el sistema de publicación de archivos SourceForge?
maven-2 (9)
Estoy utilizando SourceForge para algunos proyectos de código abierto y quiero automatizar la implementación de versiones para el sistema de publicación de archivos de SourceForge. Uso Maven para mis compilaciones y el mecanismo de despliegue de SFTP estándar no parece funcionar a menos que haga algún trabajo de preparación manual. He encontrado publicaciones antiguas en otros foros que sugieren que el único enfoque es escribir un Wagon específicamente para SourceForge.
Alguien ha tenido alguna experiencia reciente con esto?
El complemento Maven SourceForge no funciona con Maven 2. También creo que este complemento utiliza FTP que ya no es compatible.
Parece que tendré que escribir esto yo mismo.
Descubrí que CruiseControl puede cargar lanzamientos a SFEE y también funciona con Maven y Maven2.
No puedo probar esto para confirmarlo, pero creo que es posible sin escribir ningún complemento.
Puede implementarlo en SourceForge usando SCP , y el maven-deploy-plugin puede configurarse para usar SCP, por lo que debería funcionar. También puede implementar su sitio en SourceForge a través de SCP.
Debería configurar el servidor de SourceForge en su settings.xml para usar un nombre de usuario "combinado" con un separador de coma. Con estas credenciales:
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
El elemento del servidor se vería así:
<server>
<id>sourceforge</id>
<username>foo,bar</username>
<password>secret</password>
</server>
Y la sección distributionManagement en tu POM se vería así:
<!-- 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 debe ser utilizado:
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh-external</artifactId>
<version>1.0-alpha-5</version>
</extension>
</extensions>
</build>
Si esto no funciona, puede utilizar el enfoque recomendado en la referencia del sitio anterior, es decir, crear un shell en shell.sourceforge.net con su nombre de usuario y grupo de proyectos:
ssh -t <username>,<project name>@shell.sf.net create
Luego use shell.sourceforge.net (en lugar de web.sourceforge.net) en la URL de su sitio en la sección Administración de distribución:
<url>scp://shell.sourceforge.net/home/frs/project/P/PR/PROJECT_UNIX_NAME/</url>
Después de probar esto varias veces, finalmente lo hice funcionar - con sftp no scp. Esto debería funcionar desde un recuadro Unix (o Mac): no estoy seguro acerca de los clientes de sftp para Windoze. Estoy usando mvn versión 2.2.0 y no creo que tenga ningún complemento especial instalado. Esto implementa los diversos paquetes mvn en la sección Archivos de mi página de proyecto.
Deberá cambiar lo siguiente en su configuración para que funcione:
- usuario - reemplace con su nombre de usuario de sourceforce
- secreto - reemplace con su contraseña
- ormlite - reemplace con el nombre de su proyecto
- / o / o / - reemplace con el primer carácter y los primeros 2 caracteres del nombre de su proyecto
En mi archivo $ HOME / .m2 / settings.xml tengo lo siguiente para el servidor SF:
<server>
<id>sourceforge</id>
<password>secret</password>
<filePermissions>775</filePermissions>
<directoryPermissions>775</directoryPermissions>
</server>
No especifico el nombre de usuario en el archivo settings.xml porque necesita ser nombre de usuario, proyecto y quiero implementar varios paquetes en SF. Luego, en mi archivo pom.xml para el paquete ormlite, tengo lo siguiente:
<distributionManagement>
<repository>
<id>sourceforge</id>
<name>SourceForge</name>
<url>sftp://user,[email protected]:/home/frs/project/o/or/ormlite/releases
</url>
</repository>
<snapshotRepository>
<id>sourceforge</id>
<name>SourceForge</name>
<url>sftp://user,[email protected]:/home/frs/project/o/or/ormlite/snapshots
</url>
</snapshotRepository>
</distributionManagement>
Obviamente, los sufijos del directorio / releases y / snapshots se pueden cambiar dependiendo de la jerarquía de archivos.
Donde timp = usuario y webmacro = proyecto
scp url no funciona:
scp://timp,[email protected]:/home/groups/w/we/webmacro/htdocs/maven2/
sftp url funciona:
sftp://timp,[email protected]:/home/groups/w/we/webmacro/htdocs/maven2
o para artefactos de lanzamiento del proyecto:
sftp://timp,[email protected]:/home/frs/project/w/we/webmacro/releases
scp funcionará en shell.sourceforge.net, pero debe crear el shell antes de su uso con
ssh -t timp,[email protected] create
He subido un ejemplo a sourceforge.net en: http://sf-mvn-plugins.sourceforge.net/example-1jar-thinlet/
Puede consultarlo a través de svn, para que pueda ver cómo usar complementos para cargar y descargar y para el área del sistema de archivos sourceforge.net y el sitio web.
Los puntos principales para cargar son usar sftp:
Agregue este código similar a su 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>
Agregue un código similar 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>
El principal punto de descarga es utilizar el complemento maven wagon-http-source forge, consulte en: sf-mvn-plugins.sourceforge.net/wagon-http-sourceforge/FAQ.html
Por favor agregue el siguiente código a su 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>
Esto realmente no resultó ser tan difícil. Primero tuve el sitio mvn: implementar trabajo siguiendo las instrucciones en este sitio de sourceforge . Básicamente, inicias el shell sourceforge con
ssh -t user,[email protected] create
Eso creará el shell en su extremo con una carpeta montada en su proyecto en una ruta tal como (dependiendo del nombre de su proyecto):
/home/groups/c/ch/chex4j/
En ese shell I en el servidor de sourceforge, creé una carpeta para mi repositorio en la carpeta del proyecto apache "htdocs" con
mkdir /home/groups/c/ch/chex4j/htdocs/maven2
En mi settings.xml configuré el nombre de usuario y la contraseña para ese servidor shell para que Maven pueda iniciar sesión:
<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>
En el pom.xml, solo necesita la configuración de la sección distibutionManagement para asignar un nombre al servidor por ID en el que ha establecido la contraseña en su archivo de configuración:
<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>
Allí, la entrada del repositorio es la del comando mvn deploy y la entrada del sitio para el sitio mvn: comando deploy. Entonces, todo lo que tengo que hacer es iniciar la conexión del shell para que aparezca el lado del servidor y luego en mi lado local solo ejecutar:
mvn deploy
que carga el jar, pom y fuentes y similares en mi sitio web de proyectos de sourceforge. Si intentas acceder a la carpeta / maven2 en el sitio web de tu proyecto, sourceforge amablemente te dirá que la lista de directorios está desactivada por defecto y cómo solucionarlo. Para hacer esto en el shell del servidor, cree un archivo .htaccess en su carpeta htdocs / maven2 que contenga las siguientes opciones de apache
Options +Indexes
Entonces, bingo, tienes un repositorio maven que se ve así:
http://chex4j.sourceforge.net/maven2/net/sf/chex4j/chex4j-core/1.0.0/
Su shell sf.net se apaga después de varias horas para no acaparar recursos; entonces ejecuta el "ssh -t ... create" cuando desea implementar el sitio o sus artefactos de construcción.
Puede buscar todo el código de mi proyecto maven bajo sourceforge para ver mi configuración de trabajo:
http://chex4j.svn.sourceforge.net/viewvc/chex4j/branches/1.0.x/chex4j-core/
La URL SCP funciona. Pero no use ":" después del nombre del servidor. MVN intenta leer la siguiente prueba como un número entero (número de puerto).
No es necesario establecer túneles como lo hizo simbo1905.