Tengo un tenedor de una pequeña biblioteca de código abierto en la que estoy trabajando en github. Me gustaría ponerlo a disposición de otros desarrolladores a través de Maven, pero no quiero ejecutar mi propio servidor Nexus, y debido a que es una bifurcación, no puedo implementarlo fácilmente en oss.sonatype.org.
Lo que me gustaría hacer es implementarlo en Github para que otros puedan acceder a él usando Maven. ¿Cuál es la mejor manera de hacer esto?
maven
github
github-pages
mvn-repo
emmby
fuente
fuente
Respuestas:
La mejor solución que he podido encontrar consiste en estos pasos:
mvn-repo
para alojar tus artefactos maven.mvn-repo
como repositorio maven.Existen varios beneficios al usar este enfoque:
mvn-repo
, al igual que las páginas github se mantienen en una rama separada llamadagh-pages
(si usa páginas github)gh-pages
si las está utilizando.mvn deploy
como lo harías normalmenteLa 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
:Ahora intenta correr
mvn clean deploy
. Verás que desplegó tu repositorio maven entarget/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 githubsite-maven-plugin
pueda enviar a GitHub:(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:Finalmente, configure el
site-maven-plugin
para cargar desde su repositorio temporal en sumvn-repo
sucursal en Github: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.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:
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.
fuente
<merge>true</merge>
de su sitio-maven-plugin. Sin embargo, si haces eso, creo que tendrás que crear manualmente la rama mvn-repo en github y eliminar todos sus archivos la primera vez.<altDeploymentRepository>internal.repo::default::file://${user.dir}/target/mvn-repo</altDeploymentRepository>
con el complemento maven-deploy y<outputDirectory>${user.dir}/target/mvn-repo</outputDirectory>
con el complemento site-maven . Esto desplegará todos los artefactos en el proyecto raíz ("padre") y los enviará al directorio padre respectivo en github. De lo contrario, la compilación de cada submódulo sobrescribirá la del submódulo construido antes ...<github.global.userName>YourUserName</github.global.userName> <github.global.password>${GITHUB_OAUTH_TOKEN</github.global.password>
No use GitHub como repositorio Maven.
Editar: esta opción recibe muchos votos negativos, pero no hay comentarios sobre por qué. Esta es la opción correcta independientemente de las capacidades técnicas para alojar realmente en GitHub. Hospedar en GitHub es incorrecto por todas las razones que se detallan a continuación y sin comentarios no puedo mejorar la respuesta para aclarar sus problemas.
La mejor opción: colaborar con el proyecto original
La mejor opción es convencer al proyecto original para que incluya sus cambios y se adhiera al original.
Alternativa: mantenga su propio tenedor
Dado que ha bifurcado una biblioteca de código abierto, y su bifurcación también es de código abierto, puede cargar su bifurcación en Maven Central (lea la Guía para cargar artefactos en el Repositorio central ) dándole una nueva
groupId
y tal vez una nuevaartifactId
.Solo considere esta opción si está dispuesto a mantener esta bifurcación hasta que los cambios se incorporen al proyecto original y luego debe abandonar esta.
Considere realmente si un tenedor es la opción correcta. Lea los innumerables resultados de Google para "por qué no bifurcar"
Razonamiento
Inflar el repositorio con frascos aumenta el tamaño de descarga sin beneficio
Un jar es parte
output
de su proyecto, puede regenerarse en cualquier momento a partir de élinputs
, y su repositorio de GitHub solo debe contenerinputs
.No me creas Luego verifique los resultados de Google para 'no almacenar binarios en git' .
Ayuda de GitHub Trabajar con archivos grandes le dirá lo mismo. Es cierto que los jar no son grandes, pero son más grandes que el código fuente y una vez que un jar ha sido creado por una versión, no tienen ninguna razón para ser versionados, para eso es para lo que sirve una nueva versión.
La definición de múltiples repos en su pom.xml ralentiza su construcción por Número de repositorios veces Número de artefactos
Stephen Connolly dice :
¡Así es! Maven necesita verificar cada artefacto (y sus dependencias) definidos en su pom.xml contra cada Repositorio que haya definido , ya que una versión más nueva podría estar disponible en cualquiera de esos repositorios.
Pruébelo usted mismo y sentirá el dolor de una construcción lenta.
El mejor lugar para los artefactos es Maven Central, ya que es el lugar central para los frascos, y esto significa que su construcción solo verificará un lugar.
Puede leer más sobre los repositorios en la documentación de Maven en Introducción a los repositorios
fuente
Puede usar JitPack (gratuito para repositorios públicos de Git) para exponer su repositorio de GitHub como un artefacto de Maven. Es muy fácil. Sus usuarios necesitarían agregar esto a su pom.xml:
Como se respondió en otra parte, la idea es que JitPack construirá su repositorio de GitHub y servirá los frascos. El requisito es que tenga un archivo de compilación y una versión de GitHub.
Lo bueno es que no tiene que manejar la implementación y las cargas. Dado que no quería mantener su propio repositorio de artefactos, es una buena combinación para sus necesidades.
fuente
Otra alternativa es utilizar cualquier alojamiento web con soporte webdav. Necesitará algo de espacio para esto en algún lugar, por supuesto, pero es sencillo de configurar y una buena alternativa para ejecutar un servidor nexus completo.
agregue esto a su sección de compilación
Agregue algo como esto a su sección de administración de distribución
Finalmente, asegúrese de configurar el acceso al repositorio en su settings.xml
agregue esto a la sección de sus servidores
y una definición para tu sección de repositorios
Finalmente, si tiene un hosting php estándar, puede usar algo como sabredav para agregar capacidades webdav.
Ventajas: tiene su propio repositorio maven. Desventajas: no tiene ninguna de las capacidades de administración en nexus; necesita alguna configuración de webdav en alguna parte
fuente
Desde 2019, ahora puede usar la nueva funcionalidad llamada registro de paquetes de Github .
Básicamente el proceso es:
settings.xml
desplegar usando
fuente
Como alternativa, Bintray ofrece alojamiento gratuito de repositorios maven. Probablemente sea una buena alternativa a Sonatype OSS y Maven Central si no desea cambiar el nombre de groupId. Pero, por favor, al menos haga un esfuerzo para integrar sus cambios corriente arriba o cambie el nombre y publíquelo en Central. Hace que sea mucho más fácil para otros usar su tenedor.
fuente
Si sólo tiene
aar
ojar
archivo en sí, o simplemente no desea utilizar plugins - He creado un simple script de shell . Puede lograr lo mismo con él: publicar sus artefactos en Github y usarlo como repositorio público de Maven.fuente