La mejor solución que he podido encontrar consiste en estos pasos:
- Crea una rama llamada
mvn-repo
para alojar tus artefactos maven.
- Use el github site-maven-plugin para empujar sus artefactos a github.
- Configure maven para usar su control remoto
mvn-repo
como repositorio maven.
Existen varios beneficios al usar este enfoque:
- Los artefactos Maven se mantienen separados de su fuente en una rama separada llamada
mvn-repo
, al igual que las páginas github se mantienen en una rama separada llamada gh-pages
(si usa páginas github)
- A diferencia de otras soluciones propuestas, no entra en conflicto con usted
gh-pages
si las está utilizando.
- Se vincula naturalmente con el objetivo de despliegue para que no haya nuevos comandos maven para aprender. Solo úsalo
mvn deploy
como lo harías normalmente
La forma típica de implementar artefactos en un repositorio remoto de Maven es usar mvn deploy
, así que vamos a conectar ese mecanismo para esta solución.
Primero, dígale a Maven que despliegue artefactos en una ubicación de almacenamiento temporal dentro de su directorio de destino. Agregue esto a su pom.xml
:
<distributionManagement>
<repository>
<id>internal.repo</id>
<name>Temporary Staging Repository</name>
<url>file://${project.build.directory}/mvn-repo</url>
</repository>
</distributionManagement>
<plugins>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.1</version>
<configuration>
<altDeploymentRepository>internal.repo::default::file://${project.build.directory}/mvn-repo</altDeploymentRepository>
</configuration>
</plugin>
</plugins>
Ahora intenta correr mvn clean deploy
. Verás que desplegó tu repositorio maven en target/mvn-repo
. El siguiente paso es conseguir que cargue ese directorio en GitHub.
Agregue su información de autenticación para ~/.m2/settings.xml
que el github site-maven-plugin
pueda enviar a GitHub:
<!-- NOTE: MAKE SURE THAT settings.xml IS NOT WORLD READABLE! -->
<settings>
<servers>
<server>
<id>github</id>
<username>YOUR-USERNAME</username>
<password>YOUR-PASSWORD</password>
</server>
</servers>
</settings>
(Como se señaló, asegúrese de chmod 700 settings.xml
que nadie pueda leer su contraseña en el archivo. Si alguien sabe cómo hacer que el sitio-maven-plugin solicite una contraseña en lugar de solicitarla en un archivo de configuración, hágamelo saber).
Luego dígale a GitHub site-maven-plugin
sobre el nuevo servidor que acaba de configurar agregando lo siguiente a su pom:
<properties>
<!-- github server corresponds to entry in ~/.m2/settings.xml -->
<github.global.server>github</github.global.server>
</properties>
Finalmente, configure el site-maven-plugin
para cargar desde su repositorio temporal en su mvn-repo
sucursal en Github:
<build>
<plugins>
<plugin>
<groupId>com.github.github</groupId>
<artifactId>site-maven-plugin</artifactId>
<version>0.11</version>
<configuration>
<message>Maven artifacts for ${project.version}</message> <!-- git commit message -->
<noJekyll>true</noJekyll> <!-- disable webpage processing -->
<outputDirectory>${project.build.directory}/mvn-repo</outputDirectory> <!-- matches distribution management repository url above -->
<branch>refs/heads/mvn-repo</branch> <!-- remote branch name -->
<includes><include>**/*</include></includes>
<repositoryName>YOUR-REPOSITORY-NAME</repositoryName> <!-- github repo name -->
<repositoryOwner>YOUR-GITHUB-USERNAME</repositoryOwner> <!-- github username -->
</configuration>
<executions>
<!-- run site-maven-plugin's 'site' target as part of the build's normal 'deploy' phase -->
<execution>
<goals>
<goal>site</goal>
</goals>
<phase>deploy</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
La mvn-repo
rama no necesita existir, se creará para usted.
Ahora corre de mvn clean deploy
nuevo. Debería ver que maven-deploy-plugin "carga" los archivos a su repositorio de almacenamiento local en el directorio de destino, luego site-maven-plugin confirma esos archivos y los envía al servidor.
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building DaoCore 1.3-SNAPSHOT
[INFO] ------------------------------------------------------------------------
...
[INFO] --- maven-deploy-plugin:2.5:deploy (default-deploy) @ greendao ---
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/1.3-SNAPSHOT/greendao-1.3-20121223.182256-3.jar (77 KB at 2936.9 KB/sec)
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/1.3-SNAPSHOT/greendao-1.3-20121223.182256-3.pom (3 KB at 1402.3 KB/sec)
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/1.3-SNAPSHOT/maven-metadata.xml (768 B at 150.0 KB/sec)
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/maven-metadata.xml (282 B at 91.8 KB/sec)
[INFO]
[INFO] --- site-maven-plugin:0.7:site (default) @ greendao ---
[INFO] Creating 24 blobs
[INFO] Creating tree with 25 blob entries
[INFO] Creating commit with SHA-1: 0b8444e487a8acf9caabe7ec18a4e9cff4964809
[INFO] Updating reference refs/heads/mvn-repo from ab7afb9a228bf33d9e04db39d178f96a7a225593 to 0b8444e487a8acf9caabe7ec18a4e9cff4964809
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.595s
[INFO] Finished at: Sun Dec 23 11:23:03 MST 2012
[INFO] Final Memory: 9M/81M
[INFO] ------------------------------------------------------------------------
Visite github.com en su navegador, seleccione la mvn-repo
sucursal y verifique que todos sus archivos binarios estén allí.
¡Felicidades!
Ahora puede desplegar sus artefactos expertos en el repositorio público de un hombre pobre simplemente ejecutando mvn clean deploy
.
Hay un paso más que querrás dar, que es configurar cualquier poms que dependa de tu pom para saber dónde está tu repositorio. Agregue el siguiente fragmento al pom de cualquier proyecto que dependa de su proyecto:
<repositories>
<repository>
<id>YOUR-PROJECT-NAME-mvn-repo</id>
<url>https://github.com/YOUR-USERNAME/YOUR-PROJECT-NAME/raw/mvn-repo/</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
Ahora, cualquier proyecto que requiera sus archivos jar los descargará automáticamente de su repositorio github maven.
Editar: para evitar el problema mencionado en los comentarios ('Error al crear confirmación: solicitud no válida. Para' propiedades / nombre ', nil no es una cadena'), asegúrese de indicar un nombre en su perfil en github.