A melhor solução que consegui encontrar consiste nestas etapas:
- Crie uma ramificação chamada
mvn-repo
para hospedar seus artefatos de maven.
- Use o github site-maven-plugin para enviar seus artefatos ao github.
- Configure o maven para usar seu controle remoto
mvn-repo
como um repositório do maven.
Há vários benefícios em usar essa abordagem:
- Os artefatos do Maven são mantidos separados da sua fonte em uma ramificação separada chamada
mvn-repo
, assim como as páginas do github são mantidas em uma ramificação separada chamada gh-pages
(se você usar páginas do github)
- Ao contrário de outras soluções propostas, ele não entra em conflito com o seu,
gh-pages
se você estiver usando-o.
- Associa-se naturalmente ao destino de implantação, para que não haja novos comandos de preparação para aprender. Basta usar
mvn deploy
como faria normalmente
A 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
:
<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>
Agora tente correr mvn clean deploy
. Você verá que ele implantou seu repositório maven target/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 github site-maven-plugin
possa enviar para o 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 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:
<properties>
<!-- github server corresponds to entry in ~/.m2/settings.xml -->
<github.global.server>github</github.global.server>
</properties>
Por fim, configure o site-maven-plugin
upload do seu repositório temporário de armazenamento temporário para sua mvn-repo
filial no 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>
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.
[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 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:
<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>
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.