La migliore soluzione che sono riuscita a trovare consiste in questi passaggi:
- Crea un ramo chiamato
mvn-repo
per ospitare i tuoi manufatti maven.
- Usa il plug-in github site-maven per inviare i tuoi artefatti a github.
- Configurare Maven per usare il telecomando
mvn-repo
come repository Maven.
L'utilizzo di questo approccio comporta numerosi vantaggi:
- Gli artefatti di Maven sono tenuti separati dalla tua fonte in un ramo separato chiamato
mvn-repo
, proprio come le pagine github sono mantenute in un ramo separato chiamato gh-pages
(se usi pagine github)
- A differenza di altre soluzioni proposte, non è in conflitto con le tue
gh-pages
se le stai usando.
- Si collega naturalmente con il target deploy quindi non ci sono nuovi comandi maven da imparare. Usa
mvn deploy
come faresti normalmente
Il modo tipico di distribuire gli artefatti in un repository remoto maven è usare mvn deploy
, quindi cerchiamo di applicare il meccanismo per questa soluzione.
Innanzitutto, dire a Maven di distribuire artefatti in una posizione temporanea di staging all'interno della directory di destinazione. Aggiungi questo al tuo 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>
Ora prova a correre mvn clean deploy
. Vedrai che ha distribuito il tuo repository Maven target/mvn-repo
. Il prossimo passo è farlo caricare questa directory su GitHub.
Aggiungi le tue informazioni di autenticazione in ~/.m2/settings.xml
modo che Github site-maven-plugin
possa inviare 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>
(Come notato, assicurati di chmod 700 settings.xml
assicurarti che nessuno possa leggere la tua password nel file. Se qualcuno sa come richiedere una password per site-maven-plugin invece di richiederla in un file di configurazione, fammelo sapere.)
Quindi informa GitHub site-maven-plugin
del nuovo server appena configurato aggiungendo quanto segue a pom:
<properties>
<!-- github server corresponds to entry in ~/.m2/settings.xml -->
<github.global.server>github</github.global.server>
</properties>
Infine, configura il site-maven-plugin
caricamento dal tuo repository temporaneo di gestione temporanea al tuo mvn-repo
ramo su 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>
Il mvn-repo
ramo non ha bisogno di esistere, sarà creato per te.
Ora corri di mvn clean deploy
nuovo. Dovresti vedere maven-deploy-plugin "carica" i file nel tuo repository di staging locale nella directory di destinazione, quindi site-maven-plugin che commette quei file e li spinge sul server.
[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] ------------------------------------------------------------------------
Visita github.com nel tuo browser, seleziona il mvn-repo
ramo e verifica che tutti i tuoi binari siano ora lì.
Congratulazioni!
Ora puoi distribuire i tuoi manufatti maven al repository pubblico di un uomo povero semplicemente correndo mvn clean deploy
.
C'è un altro passo che vorrai fare, che è quello di configurare tutti i pom che dipendono dal tuo pom per sapere dove si trova il tuo repository. Aggiungi il frammento seguente al pom di qualsiasi progetto che dipende dal tuo progetto:
<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>
Ora qualsiasi progetto che richiede i tuoi file jar li scaricherà automaticamente dal tuo repository github maven.
Modifica: per evitare il problema menzionato nei commenti ('Errore durante la creazione del commit: richiesta non valida. Per' properties / name ', nil non è una stringa.'), Assicurati di indicare un nome nel tuo profilo su github.