2012-03-27 15 views
5

Estoy migrando un proyecto a Maven y como solíamos hacer siempre referencia a nuestras compilaciones con el último número de cambio en nuestro repositorio Perforce SCM, me gustaría poder extraer esto informaciónConfigurando Perforce scm en el proyecto maven para obtener la última lista de cambios

estoy intentando configurar Maven plugin de SMC a través de los recursos siguientes:

En primer lugar no entiendo cómo hacer que funcione, así que si alguien tiene un ejemplo completamente de trabajo, estaré feliz de, por mi parte he tratado mediante la adición en mi 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> 

esto me está dando lugar 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 

Seguramente olvidó algo, voy a tratar de volver a leer las instrucciones y ver lo que extraño, pero si alguien sabe ...

de todos modos, mi pregunta es más bien: se es wo ¿Lo está intentando? No veo en las acciones disponibles del complemento scm nada que me ayude a obtener la última información de cambio e integrarla en un número de compilación de referencia. ¿Debo desarrollar mi propio complemento para esto?

Gracias de antemano.

Respuesta

2

Recibí algunos consejos de uno de los desarrolladores de P4Maven que podrían ser útiles.

Primero, verifique su configuración. La etiqueta "..." en "" debe ser uno de los nombres de etiqueta en la etiqueta "" (es decir, "conexión" o "conexión desarrollador")

Existen dos opciones para usar Maven con Perforce SCM.

  1. utilizar el valor por defecto (built-in) proveedor de Maven Perforce SCM (p4 comandos basados)

    • Tenga en cuenta que tendrá que instalar el ejecutable p4 comandos
    • Puede establecer el nombre de usuario y contraseña utilizando variables de entorno o args JVM

[variables de entorno] P4CLIENT = P4PASSWD = P4USER =

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. utilizar el proveedor P4Maven Perforce SCM (basado 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

...

  • Tenga en cuenta que para P4Maven estamos anulando el proveedor predeterminado dentro del plug-in "experto-SMC-plugin".

  • Tenga en cuenta que estamos utilizando "scmp4" (si utiliza P4Maven) en lugar de "scmperforce" (predeterminado incorporado) como el nombre del proveedor, ya que la implementación predeterminada existente toma "forzosamente".

+0

Gracias por la respuesta, haré una prueba y volveré a partir de entonces – Gurvan

1

he tenido problemas con exactamente el mismo problema hace poco - Yo sólo quería llegar a un número de revisión Perforce utilizarlo en artefactos Maven (por ejemplo, como parte de un nombre). Revisé buildnumber-maven-plugin, pero no admite Perforce en absoluto. También probé maven-release-plugin, pero me parece que es demasiado e incluso no sé si hará lo que necesito.

De todos modos terminé con una solución que no me gusta, pero funciona. Obtengo este número de revisión directamente con el ejecutable p4 a través de anter y antrun plugin (debe usar la versión 1.7 más reciente para exportar la propiedad ant a maven). También necesita tener el ejecutable p4 disponible.

Después de utilizar esta configuración de complemento, tiene $ {revision.number} disponible en 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

Hola, finalmente terminé haciendo lo mismo que tú, pero haciendo un plugin de maven. aunque no es muy satisfactorio. – Gurvan

+0

Espero que haya una mejor solución. – banterCZ

0

Ha sido un par de años desde que se hizo la pregunta, pero en el intervalo de p4maven ha sido reescrito, y la documentación actualizada es sorprendentemente difícil de encontrar.

Aquí está el nuevo README.md. Lo seguí y todo funciona. En este punto, 1.0.6 es la última versión en maven central.

Descubrí la fuente de un enlace en la página de plugin Maven build number.

0

Aterricé aquí mientras buscaba la solución de un problema similar "NO se pudo determinar la configuración" que tuve que enfrentar con el cliente de Code Collaborator con P4. Terminé desinstalando el cliente P4 y volviendo a instalarlo para que funcione.

Cuestiones relacionadas