Come posso distribuire gli artefatti da una build Maven al sistema di rilascio dei file SourceForge?
-
08-06-2019 - |
Domanda
Sto utilizzando SourceForge per alcuni progetti Open Source e desidero automatizzare la distribuzione delle versioni nel sistema di rilascio dei file SourceForge.Utilizzo Maven per le mie build e il meccanismo di distribuzione SFTP standard non sembra funzionare a meno che non si esegua un lavoro di preparazione manuale.Mi sono imbattuto in alcuni vecchi messaggi su altri forum che suggeriscono che l'unico approccio è scrivere un Wagon appositamente per SourceForge.
Qualcuno ha avuto qualche esperienza recente in merito?
Soluzione
Non sono in grado di testarlo per confermarlo, ma credo che sia possibile senza scrivere alcun plugin.
Puoi distribuire su SourceForge utilizzando SCP, e il plugin maven-deploy può essere configurato su utilizzare SCP quindi dovrebbe funzionare.Puoi anche distribuire il tuo sito a SourceForge tramite SCP.
Dovresti configurare il server SourceForge nel tuo settings.xml per utilizzare un nome utente "combinato" con un separatore virgola.Con queste credenziali:
SourceForge username: foo
SourceForge user password: secret
SourceForge project name: bar
Path: /home/frs/project/P/PR/PROJECT_UNIX_NAME/
- Substitute your project UNIX name data for /P/PR/PROJECT_UNIX_NAME
L'elemento server sarebbe simile a questo:
<server>
<id>sourceforge</id>
<username>foo,bar</username>
<password>secret</password>
</server>
E la sezione distributionManagement nel tuo POM sarebbe simile a questa:
<!-- Enabling the use of FTP -->
<distributionManagement>
<repository>
<id>ssh-repository</id>
<url>
scpexe://frs.sourceforge.net:/home/frs/project/P/PR/PROJECT_UNIX_NAME</url>
</repository>
</distributionManagement>
Infine dichiara che deve essere utilizzato ssh-external:
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh-external</artifactId>
<version>1.0-alpha-5</version>
</extension>
</extensions>
</build>
Se questo non funziona, potresti essere in grado di utilizzare l'approccio consigliato nel riferimento al sito sopra, ad es.crea una shell su shell.sourceforge.net con il tuo nome utente e gruppo di progetto:
ssh -t <username>,<project name>@shell.sf.net create
Quindi utilizza shell.sourceforge.net (invece di web.sourceforge.net) nell'URL del tuo sito nella sezione diestributionManagement:
<url>scp://shell.sourceforge.net/home/frs/project/P/PR/PROJECT_UNIX_NAME/</url>
Altri suggerimenti
Ho caricato un esempio su sourceforge.net all'indirizzo: http://sf-mvn-plugins.sourceforge.net/example-1jar-thinlet/
Puoi verificarlo tramite svn, così puoi vedere come utilizzare i plugin per caricare e scaricare da e verso l'area del file system e il sito web di sourceforge.net.
I punti principali da caricare sono utilizzare sftp:
Aggiungi questo codice simile al tuo pom.xml
<distributionManagement>
<!-- use the following if you're not using a snapshot version. -->
<repository>
<id>sourceforge-sf-mvn-plugins</id>
<name>FRS Area</name>
<uniqueVersion>false</uniqueVersion>
<url>sftp://web.sourceforge.net/home/frs/project/s/sf/sf-mvn-plugins/m2-repo</url>
</repository>
<site>
<id>sourceforge-sf-mvn-plugins</id>
<name>Web Area</name>
<url>
sftp://web.sourceforge.net/home/groups/s/sf/sf-mvn-plugins/htdocs/${artifactId}
</url>
</site>
</distributionManagement>
Aggiungi codice simile a settings.xml
<server>
<id>sourceforge-sf-mvn-plugins-svn</id>
<username>tmichel,sf-mvn-plugins</username>
<password>secret</password>
</server>
<server>
<id>sourceforge-sf-mvn-plugins</id>
<username>user,project</username>
<password>secret</password>
</server>
Il punto principale per il download è utilizzare il plugin wagon-http-sourceforge maven - vedere:sf-mvn-plugins.sourceforge.net/wagon-http-sourceforge/FAQ.html
Aggiungi il seguente codice al tuo pom.xml
<repositories>
<repository>
<id>sourceforge-svn</id>
<name>SF Maven Plugin SVN Repository</name>
<url>http://sf-mvn-plugins.svn.sourceforge.net/svnroot/sf-mvn-plugins/_m2-repo/trunk</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>sourceforge-frs</id>
<name>SF Maven Plugin Repository</name>
<url>http://sourceforge.net/projects/sf-mvn-plugins/files/m2-repo</url>
</pluginRepository>
</pluginRepositories>
<build>
<extensions>
<extension>
<groupId>net.sf.maven.plugins</groupId>
<artifactId>wagon-http-sourceforge</artifactId>
<version>0.4</version>
</extension>
</extensions>
:
</build>
Sembra che dovrò scriverlo io stesso.
Dopo averlo provato diverse volte, finalmente sono riuscito a farlo funzionare sftp non scp.Dovrebbe funzionare da un sistema Unix (o Mac): non sono sicuro dei client sftp per Windoze.Sto usando la versione 2.2.0 di mvn e non credo di avere plugin speciali installati.Questo distribuisce i vari pacchetti mvn nella sezione File della pagina del mio progetto.
Dovrai modificare quanto segue nelle impostazioni per farlo funzionare:
- utente: sostituiscilo con il tuo nome utente sourceforce
- segreto: sostituiscilo con la tua password
- ormlite: sostituisci con il nome del tuo progetto
- /o/o/ -- sostituisci con il primo carattere e i primi 2 caratteri del nome del tuo progetto
Nel mio file $HOME/.m2/settings.xml ho quanto segue per il server SF:
<server>
<id>sourceforge</id>
<password>secret</password>
<filePermissions>775</filePermissions>
<directoryPermissions>775</directoryPermissions>
</server>
Non specifico il nome utente nel file settings.xml perché deve essere nome utente, progetto e desidero distribuire più pacchetti su SF.Quindi, nel mio file pom.xml per il pacchetto ormlite ho quanto segue:
<distributionManagement>
<repository>
<id>sourceforge</id>
<name>SourceForge</name>
<url>sftp://user,ormlite@frs.sourceforge.net:/home/frs/project/o/or/ormlite/releases
</url>
</repository>
<snapshotRepository>
<id>sourceforge</id>
<name>SourceForge</name>
<url>sftp://user,ormlite@frs.sourceforge.net:/home/frs/project/o/or/ormlite/snapshots
</url>
</snapshotRepository>
</distributionManagement>
Ovviamente i suffissi delle directory /releases e /snapshots possono essere modificati a seconda della gerarchia dei file.
Dove timp = utente e webmacro = progetto
L'URL scp non funziona:
scp://timp,webmacro@shell.sourceforge.net:/home/groups/w/we/webmacro/htdocs/maven2/
l'URL sftp funziona:
sftp://timp,webmacro@web.sourceforge.net:/home/groups/w/we/webmacro/htdocs/maven2
o per gli artefatti di rilascio del progetto:
sftp://timp,webmacro@web.sourceforge.net:/home/frs/project/w/we/webmacro/releases
scp funzionerà su shell.sourceforge.net, ma devi creare la shell prima di usarla con
ssh -t timp,webmacro@shell.sourceforge.net create
In realtà questo non si è rivelato così difficile.Per prima cosa ho fatto funzionare il sito mvn:deploy seguendo le istruzioni su questo sito sourceforge.Fondamentalmente si avvia la shell di sourceforge con
ssh -t user,project@shell.sourceforge.net create
Ciò creerà la shell alla fine con una cartella montata sul tuo progetto su un percorso come (a seconda del nome del tuo progetto):
/home/groups/c/ch/chex4j/
In quella shell sul server sourceforge ho creato una cartella per il mio repository nella cartella apache del progetto "htdocs" con
mkdir /home/groups/c/ch/chex4j/htdocs/maven2
Nel mio settings.xml ho impostato il nome utente e la password su quel server Shell in modo che Maven possa accedere:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd/">
<servers>
<server>
<id>chex4j.sf.net</id>
<username>me,myproject</username>
<password>password</password>
<filePermissions>775</filePermissions>
<directoryPermissions>775</directoryPermissions>
</server>
</servers>
</settings>
Nel pom.xml hai solo bisogno della configurazione della sezione distibutionManagement per denominare il server in base all'ID per cui hai impostato la password nel file delle impostazioni:
<distributionManagement>
<site>
<id>chex4j.sf.net</id>
<url>scp://shell.sourceforge.net/home/groups/c/ch/chex4j/htdocs/
</url>
</site>
<repository>
<id>chex4j.sf.net</id>
<name>SourceForge shell repo</name>
<url>scp://shell.sourceforge.net/home/groups/c/ch/chex4j/htdocs/maven2</url>
</repository>
</distributionManagement>
Lì la voce del repository è quella per il comando mvn deploy e la voce del sito è per il comando mvn site:deploy.Quindi tutto quello che devo fare è avviare la connessione alla shell per visualizzare il lato server, quindi sul mio lato locale eseguire semplicemente:
mvn deploy
che carica jar, pom, sorgenti e simili sul sito Web dei miei progetti Sourceforge.Se provi ad accedere alla cartella /maven2 sul sito web del tuo progetto sourceforge ti informa gentilmente che l'elenco delle directory è disattivato per impostazione predefinita e come risolverlo.Per fare ciò sulla shell del server crea un file .htaccess nella tua cartella htdocs/maven2 contenente le seguenti opzioni di Apache
Options +Indexes
Quindi bingo, hai un repository esperto che assomiglia a:
http://chex4j.sourceforge.net/maven2/net/sf/chex4j/chex4j-core/1.0.0/
La tua shell sf.net si spegne dopo un certo numero di ore per non consumare risorse;quindi esegui "ssh -t ...create" quando desideri distribuire il sito o gli artefatti di build.
Puoi sfogliare tutto il codice del mio progetto Maven sotto sourceforge per vedere le mie impostazioni di lavoro:
http://chex4j.svn.sourceforge.net/viewvc/chex4j/branches/1.0.x/chex4j-core/
URL della SCP fa lavoro.Ma non usare ":" dopo il nome del server.MVN tenta di leggere il seguente test come numero intero (numero di porta).
Non è necessario creare tunnel come ha fatto simbo1905.
Il plug-in Maven SourceForge non funziona con Maven 2.Inoltre credo che questo plug-in utilizzi FTP che non è più supportato.
l'ho trovato Regolazione automatica della velocità può caricare versioni su SFEE e funziona anche con Maven e Maven2