2012-03-27 10 views
5

Sto migrando un progetto a Maven e poiché eravamo sempre soliti fare riferimento alle nostre build in base all'ultimo numero di modifiche nel repository SCM Perforce, vorrei poterlo estrarre informazioniConfigurazione di Perforce scm nel progetto Maven per ottenere l'ultimo elenco delle modifiche

sto provando a configurare Maven plug-SCM via seguenti risorse:

Per prima cosa non capisco come farlo funzionare, quindi se qualcuno ha un esempio completamente funzionante, sarò felice di, da parte mia ho cercato con l'aggiunta nel mio pom:

<scm> 
    <connection> 
     scm:perforce:localhost:1666://depot/ 
     <my_project> 
      /
      <version> 
    </connection> 
    <developerConnection> 
     scm:perforce:localhost:1666:/depot/ 
     <my_project> 
      /
      <version> 
    </developerConnection> 
    <url>http://somerepository.com/view.cvs</url> 
</scm> 
... 
<plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-scm-plugin</artifactId> 
     <version>1.6</version> 
     <dependencies> 
      <!-- P4Maven --> 
      <dependency> 
       <groupId>com.perforce</groupId> 
       <artifactId>p4maven</artifactId> 
       <version>[2011,2012)</version> 
      </dependency> 
     </dependencies> 
     <configuration> 
      <connectionType>//depot/proto/kernel/kernel/04.00/maven2</connectionType> 
      <username>my local username</username> 
      <password>xxxxxx</password> 
      <includes>**</includes> 
     </configuration> 
    </plugin> 
</plugins> 

questo mi sta portando a:

[INFO] --- maven-scm-plugin:1.6:checkout (default-cli) @ kernel --- 
mars 27, 2012 9:54:08 AM org.sonatype.guice.bean.reflect.Logs$JULSink warn 
Avertissement: Error injecting: org.apache.maven.scm.provider.svn.svnexe.SvnExeScmProvider 
java.lang.NoClassDefFoundError: org/apache/maven/scm/command/info/InfoScmResult 

Sicuramente dimenticato una cosa, cercherò di leggere nuovamente le istruzioni e vedere quello che mi manca, ma se qualcuno sa ...

In ogni caso, la mia domanda è piuttosto: è no provarlo? Non vedo nelle azioni disponibili dal plugin scm nulla che possa aiutarmi a ottenere le ultime informazioni sulle modifiche e ad integrarle in un numero di build di riferimento. Devo sviluppare il mio plugin per questo?

Grazie in anticipo.

risposta

2

Ho ricevuto alcuni consigli da uno degli sviluppatori di P4Maven che potrebbe essere di aiuto.

Innanzitutto, controllare la configurazione. Il "..." nel tag "" dovrebbe essere uno dei nomi di tag nel tag "" (cioè "connessione" o "developerConnection")

Ci sono due opzioni per utilizzare Maven con Perforce SCM.

  1. Utilizzare l'impostazione predefinita (built-in), fornitore di Maven Perforce SCM (riga di comando p4 base)

    • Si noti che è necessario il file eseguibile a riga di comando p4 installato
    • È possibile impostare il nome utente e la password utilizzando le variabili di ambiente o args JVM

[variabili d'ambiente] P4CLIENT = P4USER = P4PASSWD =

o

[JVM args] -Dusername = -Dpassword =

[pom.xml] ...

... 

    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-scm-plugin</artifactId> 
    <version>1.4</version> 
    </plugin> 

    ... 

...

<!-- SCM Settings --> 
    <scm> 
    <connection>scmerforce:localhost:1666://depot/someproject</connection> 
    <developerConnection>scmerforce:localhost:1666://depot/someproject</developerConnection> 
    <url>scmerforce://depot/simple</url> 
    </scm> 

...

  1. utilizzare il provider P4Maven Perforce SCM (basato P4Java)

[pom.xml]

...

... 

    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-scm-plugin</artifactId> 
    <version>1.4</version> 
    <dependencies> 
     <!-- P4Maven --> 
     <dependency> 
     <groupId>com.perforce</groupId> 
     <artifactId>p4maven</artifactId> 
     <version>[2011,2012)</version> 
     </dependency> 
    </dependencies> 
    <configuration> 
     <connectionType>connection</connectionType> 
     <username>someuser</username> 
     <password>somepassword</password> 
     <includes>**</includes> 
    </configuration> 
    </plugin> 

    ... 

...

scm4: localhost: 1666: // depot/someproject scm4 : localhost: 1666: // depot/someproject scm4: // depot/someproject

...

  • Si noti che per P4Maven stiamo ignorando il provider predefinito all'interno del plug-in "maven-SCM-plug".

  • Si noti che stiamo utilizzando "scmp4" (se si utilizza P4Maven) anziché "scmperforce" (predefinito predefinito) come nome del provider, poiché "perforce" è preso dall'implementazione predefinita esistente.

+0

Grazie per la risposta, farò una prova e tornerò da allora in poi – Gurvan

1

ero alle prese con esattamente lo stesso problema da poco - Volevo solo per ottenere un numero di revisione Perforce di utilizzarlo in artefatti Maven (per esempio come parte di un nome). Ho controllato buildnumber-maven-plugin, ma non supporta affatto Perforce. Ho anche provato lo maven-release-plugin, ma mi sembra che faccia troppo e non ho nemmeno scoperto se farà ciò di cui ho bisogno.

In ogni caso, ho trovato una soluzione che non mi piace, ma funziona. Ottengo questo numero di revisione direttamente con l'eseguibile p4 tramite plugin ant e antrun (devi usare l'ultima versione 1.7 per esportare la proprietà ant per maven). È inoltre necessario avere un eseguibile p4 disponibile.

Dopo aver utilizzato questa configurazione del plugin, sono disponibili $ {revision.number} in Maven.

<!-- Get Perforce latest change number --> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.7</version> 
    <dependencies> 
     <dependency> 
      <groupId>ant-contrib</groupId> 
      <artifactId>ant-contrib</artifactId> 
      <version>1.0b3</version> 
     </dependency> 
    </dependencies> 
    <configuration> 
     <exportAntProperties>true</exportAntProperties> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>validate</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <target> 
        <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="maven.plugin.classpath"/> 
        <!-- Login to p4 --> 
        <exec executable="p4" inputstring="${p4.password}"> 
         <arg value="-p${p4.server}"/> 
         <arg value="-c${p4.client}"/> 
         <arg value="-u${p4.username}"/> 
         <arg value="login"/> 
        </exec> 
        <!-- Get reivision description text --> 
        <exec executable="p4" outputproperty="revision.description"> 
         <arg value="-p${p4.server}"/> 
         <arg value="-c${p4.client}"/> 
         <arg value="-u${p4.username}"/> 
         <arg value="changes"/> 
         <arg value="-m1"/> 
         <arg value="//...#have"/> 
        </exec> 
        <!-- Logout from p4 --> 
        <exec executable="p4"> 
         <arg value="-p${p4.server}"/> 
         <arg value="-c${p4.client}"/> 
         <arg value="-u${p4.username}"/> 
         <arg value="logout"/> 
        </exec> 

        <!-- Parse revision description to retrieve only revision number --> 
        <propertyregex property="revision.number" 
            input="${revision.description}" 
            regexp="Change ([0-9]*) on ([a-z,0-9]*)" 
            select="\1" 
            casesensitive="false"/> 

        <echo>Perforce latest revision number: ${revision.number}</echo> 
       </target> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+0

Ciao, alla fine ho finito per fare lo stesso come te, ma facendo un plugin Maven. non molto soddisfacente anche se davvero. – Gurvan

+0

Spero ci sia una soluzione migliore. – banterCZ

0

Sono passati alcuni anni da quando la questione è stato chiesto, ma nel p4maven dell'intervallo è stato riscritto, e la documentazione aggiornata è sorprendentemente difficile da trovare.

Ecco il nuovo README.md. L'ho seguito e tutto funziona. A questo punto, 1.0.6 è l'ultima versione in maven central.

Ho scoperto la fonte da un collegamento nella pagina del plugin del numero di build di Maven.

0

Sono atterrato qui mentre cercavo la soluzione di un problema simile "Impossibile configurare la configurazione" che ho affrontato con client Code Collaborator con P4. Ho finito con la disinstallazione del client P4 e la reinstallazione per farlo funzionare.

Problemi correlati