Pregunta

Estoy tratando de agregar svn.revision a la versión del proyecto como un número de compilación y parece que no puedo hacerlo. Mi jar tiene el nombre correcto durante el empaquetado de durin, pero está instalado en mi repositorio local, es como si $ {buildNumber} no estuviera definido cuando se configuró la versión.

Me sale foo-1.0.0-SNAPSHOT- $ {buildNumber} en lugar de foo-1.0.0-SNAPSHOT- 304

¿Alguna idea de lo que estoy haciendo mal o agregar una revisión a la versión del proyecto es una mala idea? Gracias por la ayuda.

<project>
  ...
  <version>1.0.0-${release.identifier}-${buildNumber}</version>
  <properties>
    <release.identifier>SNAPSHOT</release.identifier>
  </properties>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>useLastCommittedRevision</id>
            <goals>
              <goal>create</goal>
            </goals>
            <configuration>
              <useLastCommittedRevision>true</useLastCommittedRevision>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  ...
</project>
¿Fue útil?

Solución

El problema tiene dos partes:

  1. Está intentando configurar el buildNumber en la versión antes de que se resuelva, por lo que siempre será $ {buildNumber} en lugar del valor resuelto.

    En lugar de intentar cambiar dinámicamente la versión, debe establecer el buildNumber en el elemento finalName en la compilación. Esto creará los artefactos con el nombre deseado en el repositorio local.

  2. El complemento de instalación ignorará el finalName y lo desplegará como 1.0.0-SNAPSHOT independientemente, no conozco una manera de abordar eso. El buildNumber se agrega al Manifiesto si configura el complemento como se muestra a continuación.

    Entonces su configuración sería algo así como:

    <version>1.0.0-${release.identifier}</version>
    ...
    <build>
      <finalName>${project.artifactId}-${project.version}-${buildNumber}</finalName>
      ...
    </build>
    

Evitaría usar números de compilación en proyectos SNAPSHOT .

Maven proporciona la palabra clave SNAPSHOT para indicar un proyecto volátil en desarrollo activo. Entonces, si hace referencia a un proyecto con una versión de dependencia SNAPSHOT , Maven buscará automáticamente actualizaciones y mantendrá sus dependencias sincronizadas.

Si luego agrega un número de compilación al final de esa versión, deberá actualizar manualmente las dependencias, por lo que perderá cualquier beneficio de tener el sufijo SNAPSHOT .

Yo personalmente evito usar números de compilación cuando sea posible de todos modos. Si tengo que actualizar un proyecto, simplemente pongo el número de versión o uso un sufijo como beta-2 o RC2 . Si necesita realizar un seguimiento de la revisión en el SNAPSHOT , le recomiendo agregarlo al Manifiesto para que pueda verificar dónde se originó la compilación, pero use el sufijo estándar SNAPSHOT para Permita que Maven resuelva las versiones normalmente. La siguiente configuración muestra cómo agregar la revisión al Manifiesto.

En lo que respecta a su configuración, me parece bien suponiendo que su url SCM esté configurada correctamente. Si no tiene una configuración SCM en su POM, ese puede ser el problema.

¿Se puede ejecutar con -X y verificar si hay alguna salida del complemento que indique por qué no está configurando la propiedad?

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>buildnumber-maven-plugin</artifactId>
  <version>0.9.4</version>
  <executions>
    <execution>
      <id>useLastCommittedRevision</id>
      <phase>validate</phase>
      <goals>
        <goal>create</goal>
      </goals>
    </execution>
  </executions>
</plugin>
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>2.1</version>
  <configuration>
    <archive>
      <manifest>
        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
      </manifest>
      <manifestEntries>
        <Implementation-Build>${buildNumber}</Implementation-Build>
      </manifestEntries>
    </archive>
  </configuration>
</plugin>

Otros consejos

Agregue esto después del buildnumber-maven-plugin :

<plugin>
    <groupId>io.github.michaldo</groupId>
    <artifactId>nashorn-maven-plugin</artifactId>
    <version>0.0.1</version>
    <executions>
        <execution>
            <phase>validate</phase>
            <goals>
                <goal>eval</goal>
            </goals>
            <configuration>
                <script>
                    $project.artifact.version = "${buildNumber}";
                </script>
            </configuration>
        </execution>
    </executions>
</plugin>

Y el buildNumber será reconocido por el empaquetado y la implementación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top