Pourquoi est-Maven (à tort?) Déployer mon INSTANTANÉ à la fois la libération et les dépôts instantanés?

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

  •  29-09-2019
  •  | 
  •  

Question

Je rencontre actuellement un problème tout en essayant de mettre en place un projet de déploiement d'un référentiel de lien interne. Depuis que je suis assez nouveau pour Maven en général, je pense qu'il ya quelque chose que je ne suis pas vraiment comprendre comment mettre en place la gestion de la distribution.

La question de base est que lorsque j'execute « MVN déployer » l'artefact est déployé avec succès au dépôt instantané, mais Maven tente également de le déployer sur le dépôt de la libération, qui est un échec ... comme il se doit. Ma compréhension de ma configuration actuelle est qu'il ne devrait pas être déployé dans le référentiel de libération ainsi.

J'ai inclus les différents éléments de configuration ci-dessous, mais je me demande si je suis vraiment censé gérer la section avec un profil afin que l'instantané ne builds ont défini, et la libération ont builds seulement défini.

Toute aide / précisions à ce sujet serait très apprécié.

Je suit dans mon POM pour la gestion de la distribution:

<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>

Ailleurs dans le POM je donne les résultats suivants mis en place pour permettre l'utilisation de ces dépôts pour obtenir des objets:

<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>

Je les bons paramètres dans mon settings.xml à fournir des informations pour être en mesure de publier à cette instance de lien de test en cours d'exécution sur mon ordinateur, et il est en fait déployer avec succès l'instantané.

Le problème est qu'il tente également de déployer l'instantané dans le référentiel de libération, qui est configuré pour rejeter les instantanés.

La sortie de "déploiement mvn" comprend les éléments suivants:

[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

Le journal de Nexus contient les éléments suivants (comme je l'attendre à):

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
Était-ce utile?

La solution 2

Donc, la meilleure idée en fait avéré être juste devant mes yeux dans le journal. Le seul objet que je pensais être produit par le POM, je travaillais avec était un .war, mais vous remarquerez dans le journal que l'artefact Maven tente de déployer à la libération est en fait un .jar.

Cela suffit d'un pointeur (que quelqu'un sur la liste de diffusion des utilisateurs Maven pointue fourni) pour rechercher et éventuellement trouver que quelqu'un avait inclus la configuration supplémentaire suivante pour la phase de déploiement.

<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>

Notez que ceci est en fait directement référence ${project.distributionManagement.repository.url}. En outre, cette configuration est quelque peu erronée et aurait dû été accompli par la propriété attachClasses du plugin de guerre.

Autres conseils

  1. Définir la propriété suivante dans votre pom

    <deployFileUrl>${project.distributionManagement.snapshotRepository.url}</deployFileUrl>
    
  2. Modifier la configuration de-deploy-plugin Maven comme suit:

    <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. Ajouter un profil suivant pour définir la propriété deployFileUrl avec dépôt url

    <profiles>
        <profile>
            <id>release-mode</id>
            <properties>
                <deployFileUrl>${project.distributionManagement.repository.url}</deployFileUrl>
            </properties>
        </profile>
    </profiles>
    
  4. Enfin appeler ce profil dans le plugin maven-release-

    <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>
    

Peut-être parce que l'artefact Version ne dispose pas des suffixe -SNAPSHOT?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top