¿Por qué es Maven (incorrectamente?) Desplegar mi INSTANTÁNEA tanto a los repositorios de liberación y de instantáneas?

StackOverflow https://stackoverflow.com/questions/4099412

  •  29-09-2019
  •  | 
  •  

Pregunta

Actualmente estoy experimentando un problema al intentar establecer un proyecto para desplegar a un repositorio nexo interno. Ya que soy bastante nuevo en Maven, en general, espero que sólo hay algo que no estoy realmente en la comprensión de cómo configurar la gestión de la distribución.

El problema básico es que cuando ejecuto "mvn desplegar" el artefacto está siendo desplegado con éxito para el repositorio de instantánea, pero Maven también está tratando de implementarlo en el repositorio de liberación, que está fallando ... como debe ser. Mi comprensión de mi configuración actual es que no debe ser desplegado en el repositorio de liberación también.

He incluido los distintos elementos de configuración abajo, pero me pregunto si en realidad se supone que la gestión de la sección con un perfil para que sólo construye instantánea han definido, y las versiones de lanzamiento sólo se han definido.

Cualquier ayuda / aclaraciones sobre esto sería muy apreciado.

Tengo el siguiente en mi POM para la gestión de distribución:

<distributionManagement>
<repository>
  <id>internal-releases</id>
  <name>Internal Releases</name>
  <url>http://localhost:8081/nexus/content/repositories/releases</url>
</repository>
<snapshotRepository>
  <id>internal-snapshots</id>
  <name>Internal Snapshots</name>
  <url>http://localhost:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>

En otras partes del POM Tengo el siguiente configurado para permitir el uso de estos repositorios para obtener artefactos:

<repositories>
<repository>
  <id>internal-releases</id>
  <url>http://localhost:8081/nexus/content/repositories/releases</url>
  <snapshots><enabled>false</enabled></snapshots>
</repository>
<repository>
  <id>internal-snapshots</id>
  <url>http://localhost:8081/nexus/content/repositories/snapshots</url>
  <snapshots><enabled>true</enabled></snapshots>
</repository>
<!-- other repos, etc, etc -->
</repositories>

Tengo los ajustes correctos en mi settings.xml para proporcionar credenciales para poder publicar en este caso nexo de prueba que se ejecuta en el ordenador, y es, de hecho, el despliegue con éxito la instantánea.

El problema es que también se trata de desplegar la instantánea en el repositorio de la liberación, que está configurado para instantáneas no se utilizarán.

La salida de "deploy mvn" incluye los siguientes:

[INFO] [deploy:deploy {execution: default-deploy}]
[INFO] Retrieving previous build number from internal-snapshots
Uploading: http://localhost:8081/nexus/content/repositories/snapshots/com/internal/service/1.0.0-SNAPSHOT/service-1.0.0-20101104.170338-8.war
405K uploaded  (service-1.0.0-20101104.170338-8.war)
[INFO] Retrieving previous metadata from internal-snapshots
[INFO] Uploading repository metadata for: 'snapshot com.internal:service:1.0.0-SNAPSHOT'
[INFO] Retrieving previous metadata from internal-snapshots
[INFO] Uploading repository metadata for: 'artifact com.internal:service'
[INFO] Uploading project information for service 1.0.0-20101104.170338-8
[INFO] [deploy:deploy-file {execution: default}]
[INFO] Retrieving previous build number from remote-repository
[INFO] repository metadata for: 'snapshot com.internal:service:1.0.0-SNAPSHOT' could not be found on repository: remote-repository, so will be created
Uploading: http://localhost:8081/nexus/content/repositories/releases/com/internal/service/1.0.0-SNAPSHOT/service-1.0.0-20101104.170338-1.jar
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error deploying artifact: Failed to transfer file: http://localhost:8081/nexus/content/repositories/releases/com/internal/service/1.0.0-SNAPSHOT/service-1.0.0-20101104.170338-1.jar. Return code is: 400

El registro de Nexus contiene lo siguiente (lo que cabe esperar que a):

jvm 1    | 2010-11-04 13:03:39 INFO  [p-759477796-118] - o.s.n.p.m.m.M2Repos~          - Storing of item releases:/com/internal/service/1.0.0-SNAPSHOT/service-1.0.0-20101104.170338-1.jar is forbidden by Maven Repository policy. Because releases is a RELEASE repository
jvm 1    | 2010-11-04 13:03:39 ERROR [p-759477796-118] - o.s.n.r.ContentPlex~          - Got exception during processing request "PUT http://localhost:8081/nexus/content/repositories/releases/com/internal/service/1.0.0-SNAPSHOT/service-1.0.0-20101104.170338-1.jar": Storing of item releases:/com/internal/service/1.0.0-SNAPSHOT/service-1.0.0-20101104.170338-1.jar is forbidden by Maven Repository policy. Because releases is a RELEASE repository
¿Fue útil?

Solución 2

Así que la mejor idea en realidad resultó ser justo en frente de mis ojos en el registro. El pensamiento único artefacto que tenía estaba siendo producido por el POM estaba trabajando con un .war era, pero se dará cuenta en el registro de que el artefacto, que Maven está tratando de implementar en la liberación es en realidad un .jar.

Esto fue suficiente de un puntero (que alguien en los usuarios Maven lista de correo en punta provisto) para buscar y, finalmente, encontrar a alguien que había incluido la siguiente configuración adicional para la fase de implementación.

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<executions>
<execution>
  <phase>deploy</phase>
    <goals>
      <goal>deploy-file</goal>
    </goals>
    <configuration>
      <packaging>jar</packaging>
      <generatePom>true</generatePom>
      <url>${project.distributionManagement.repository.url}</url>
      <artifactId>${project.artifactId}</artifactId>
      <groupId>${project.groupId}</groupId>
      <version>${project.version}</version>
      <file>${project.build.directory}/${project.build.finalName}.jar</file>
    </configuration>
  </execution>
</executions>
</plugin>

Tenga en cuenta que esto es de hecho referencia directa a ${project.distributionManagement.repository.url}. Además, esta configuración fue algo equivocado y en realidad debería haberse logrado a través de la propiedad attachClasses del plugin guerra.

Otros consejos

  1. Definir siguiente propiedad en su pom

    <deployFileUrl>${project.distributionManagement.snapshotRepository.url}</deployFileUrl>
    
  2. Cambiar la configuración de despliegue-maven-Plugin como sigue:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-deploy-plugin</artifactId>
        <version>2.5</version>
        <configuration>
            <skip>true</skip>
        </configuration>
        <executions>
            <execution>
                <phase>deploy</phase>
                <configuration>
                    <packaging>jar</packaging>
                    <generatePom>true</generatePom>
                    <url>${deployFileUrl}</url>
                    <artifactId>${project.artifactId}</artifactId>
                    <groupId>${project.groupId}</groupId>
                    <version>${project.version}</version>
                    <file>${project.build.directory}/${project.build.finalName}.jar</file>
                </configuration>
                <goals>
                    <goal>deploy-file</goal>
                </goals>
            </execution>
         </executions>
     </plugin>
    
  3. Añadir siguiente perfil para establecer la propiedad deployFileUrl con repositorio de URL

    <profiles>
        <profile>
            <id>release-mode</id>
            <properties>
                <deployFileUrl>${project.distributionManagement.repository.url}</deployFileUrl>
            </properties>
        </profile>
    </profiles>
    
  4. Finalmente llamar a este perfil en forma de liberación maven-plugin

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <version>2.0-beta-9</version>
        <configuration>
            <releaseProfiles>release-mode</releaseProfiles>
        </configuration>
     </plugin>
    

Podría ser porque el artefacto versión no tiene -SNAPSHOT sufijo?

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