Eu tenho um garfo de uma pequena biblioteca de código aberto na qual estou trabalhando no github. Gostaria de disponibilizá-lo a outros desenvolvedores via maven, mas não quero executar meu próprio servidor Nexus e, por ser um fork, não posso implantá-lo facilmente no oss.sonatype.org.
O que eu gostaria de fazer é implantá-lo no github para que outros possam acessá-lo usando o maven. Qual é a melhor forma de fazer isso?
maven
github
github-pages
mvn-repo
empapar
fonte
fonte
Respostas:
A melhor solução que consegui encontrar consiste nestas etapas:
mvn-repo
para hospedar seus artefatos de maven.mvn-repo
como um repositório do maven.Há vários benefícios em usar essa abordagem:
mvn-repo
, assim como as páginas do github são mantidas em uma ramificação separada chamadagh-pages
(se você usar páginas do github)gh-pages
se você estiver usando-o.mvn deploy
como faria normalmenteA maneira típica de implantar artefatos em um repositório de remessa remota é usar
mvn deploy
, então vamos corrigir esse mecanismo para esta solução.Primeiro, diga ao maven para implantar artefatos em um local temporário de teste dentro do diretório de destino. Adicione isto ao seu
pom.xml
:Agora tente correr
mvn clean deploy
. Você verá que ele implantou seu repositório maventarget/mvn-repo
. O próximo passo é fazer o upload desse diretório para o GitHub.Adicione suas informações de autenticação para
~/.m2/settings.xml
que o githubsite-maven-plugin
possa enviar para o GitHub:(Como observado, certifique-se de
chmod 700 settings.xml
garantir que ninguém possa ler sua senha no arquivo. Se alguém souber como fazer o site-maven-plugin solicitar uma senha em vez de exigi-la em um arquivo de configuração, informe-me.)Em seguida, informe o GitHub
site-maven-plugin
sobre o novo servidor que você acabou de configurar, adicionando o seguinte ao seu pom:Por fim, configure o
site-maven-plugin
upload do seu repositório temporário de armazenamento temporário para suamvn-repo
filial no Github:O
mvn-repo
ramo não precisa existir, ele será criado para você.Agora corra
mvn clean deploy
novamente. Você deve ver o maven-deploy-plugin "carregar" os arquivos para o repositório de temporariedade local no diretório de destino e, em seguida, o site-maven-plugin comprometendo esses arquivos e enviando-os para o servidor.Visite github.com no seu navegador, selecione a
mvn-repo
ramificação e verifique se todos os seus binários estão lá.Parabéns!
Agora você pode implantar seus artefatos inventados no repositório público de um pobre simplesmente executando
mvn clean deploy
.Há mais uma etapa que você deseja executar, que é configurar todos os poms que dependem do seu pom para saber onde está o seu repositório. Adicione o seguinte trecho ao pom de qualquer projeto que dependa do seu projeto:
Agora, qualquer projeto que exija seus arquivos jar os fará o download automaticamente do seu repositório github maven.
Edit: para evitar o problema mencionado nos comentários ('Erro ao criar confirmação: solicitação inválida. Para' properties / name ', nil não é uma string.'), Certifique-se de indicar um nome em seu perfil no github.
fonte
<merge>true</merge>
na configuração do site-maven-plugin. Se você fizer isso, acho que terá que criar manualmente o ramo mvn-repo no github e excluir todos os seus arquivos da primeira vez.<altDeploymentRepository>internal.repo::default::file://${user.dir}/target/mvn-repo</altDeploymentRepository>
com o maven-deploy-plugin e<outputDirectory>${user.dir}/target/mvn-repo</outputDirectory>
com o site-maven-plugin . Isso implementará todos os artefatos no projeto raiz ("pai") e os enviará para o respectivo diretório pai no github. Caso contrário, a compilação de cada sub-módulo irá substituir a do sub-módulo construído antes ...<github.global.userName>YourUserName</github.global.userName> <github.global.password>${GITHUB_OAUTH_TOKEN</github.global.password>
Não use o GitHub como um repositório Maven.
Editar: Esta opção recebe muitos votos negativos, mas não há comentários sobre o porquê. Esta é a opção correta, independentemente dos recursos técnicos para realmente hospedar no GitHub. A hospedagem no GitHub está errada por todos os motivos descritos abaixo e sem comentários, não posso melhorar a resposta para esclarecer seus problemas.
Melhor opção - colabore com o projeto original
A melhor opção é convencer o projeto original a incluir suas alterações e ficar com o original.
Alternativa - Mantenha seu próprio garfo
Como você bifurcou uma biblioteca de código-fonte aberto e seu fork também é de código-fonte aberto, você pode carregá-lo no Maven Central (leia o Guia para fazer upload de artefatos no Repositório Central ), dando a ele um novo
groupId
e talvez um novoartifactId
.Considere esta opção apenas se estiver disposto a manter essa bifurcação até que as alterações sejam incorporadas ao projeto original e, em seguida, você deve abandoná-la.
Realmente considere seriamente se um garfo é a opção certa. Leia os inúmeros resultados do Google para 'por que não bifurcar-se'
Raciocínio
Inchaço no seu repositório com jars aumenta o tamanho do download sem nenhum benefício
Um jar é um
output
de seu projeto, pode ser regenerado a qualquer momento a partir deleinputs
e seu repositório do GitHub deve conter apenasinputs
.Não acredita em mim? Em seguida, verifique os resultados do Google para 'não armazene binários no git' .
Ajuda do GitHub Trabalhar com arquivos grandes diz a mesma coisa. É certo que os jars não são grandes, mas são maiores que o código-fonte e, uma vez que um jar foi criado por uma versão, eles não têm mais motivos para serem versionados - é para isso que serve uma nova versão.
Definir várias repositórios no pom.xml diminui sua compilação por Número de repositórios vezes Número de artefatos
Stephen Connolly diz :
Está certo! O Maven precisa verificar todos os artefatos (e suas dependências) definidos em seu pom.xml em relação a cada Repositório que você definiu , pois uma versão mais recente pode estar disponível em qualquer um desses repositórios.
Experimente você mesmo e sentirá a dor de uma construção lenta.
O melhor local para artefatos é no Maven Central, pois é o local central para os frascos, e isso significa que sua construção só verificará um local.
Você pode ler um pouco mais sobre repositórios na documentação do Maven em Introdução aos repositórios
fonte
Você pode usar o JitPack (gratuito para repositórios públicos do Git) para expor seu repositório do GitHub como um artefato do Maven. É muito fácil. Seus usuários precisariam adicionar isso ao pom.xml:
Como respondido em outro lugar, a idéia é que o JitPack construa seu repositório GitHub e atenda aos frascos. O requisito é que você tenha um arquivo de compilação e uma versão do GitHub.
O bom é que você não precisa lidar com a implantação e os uploads. Como você não deseja manter seu próprio repositório de artefato, é uma boa opção para suas necessidades.
fonte
Outra alternativa é usar qualquer hospedagem na web com suporte a webdav. Você precisará de algum espaço para isso em algum lugar, é claro, mas é simples de configurar e uma boa alternativa para executar um servidor nexus completo.
adicione isso à sua seção de construção
Adicione algo assim à sua seção de distribuição
Por fim, certifique-se de configurar o acesso ao repositório em settings.xml
adicione isso à sua seção de servidores
e uma definição para sua seção de repositórios
Finalmente, se você possui alguma hospedagem php padrão, pode usar algo como sabredav para adicionar recursos ao webdav.
Vantagens: você tem seu próprio repositório maven Desvantagens: você não possui nenhum recurso de gerenciamento no nexus; você precisa de alguma configuração de webdav em algum lugar
fonte
Desde 2019, agora você pode usar a nova funcionalidade chamada registro de pacotes do Github .
Basicamente, o processo é:
settings.xml
implantar usando
fonte
Como alternativa, o Bintray fornece hospedagem gratuita de repositórios maven. Essa é provavelmente uma boa alternativa ao Sonatype OSS e ao Maven Central se você absolutamente não quiser renomear o groupId. Mas, pelo menos, faça um esforço para integrar suas alterações upstream ou renomear e publicar na Central. Isso facilita muito o uso do garfo por outras pessoas.
fonte
Se você tiver apenas
aar
oujar
arquivo em si, ou simplesmente não quer usar plugins - Eu criei um script shell simples . Você pode conseguir o mesmo: publicar seus artefatos no Github e usá-lo como repositório público do Maven.fonte