2010-11-04 4 views
6

Je rencontre actuellement un problème lors de la tentative de configuration d'un projet à déployer dans un référentiel interne Nexus. Comme je suis plutôt nouveau chez Maven en général, je m'attends à ce que je ne comprenne pas vraiment comment mettre en place la gestion de la distribution. Le problème de base est que lorsque j'exécute "mvn deploy", l'artefact est déployé avec succès dans le référentiel de snapshots, mais Maven tente également de le déployer dans le référentiel de release, qui échoue ... comme il se doit. Ma compréhension de ma configuration actuelle est qu'elle ne devrait PAS être déployée dans le dépôt de publication.Pourquoi Maven (incorrectement?) Déploie-t-il mon SNAPSHOT dans les dépôts de versions et d'instantanés?

J'ai inclus les différents éléments de configuration ci-dessous, mais je me demande si je suis censé gérer la section avec un profil afin que les builds d'instantanés aient seulement été définis et que les builds soient définis.

Toute aide/clarification à ce sujet serait très appréciée.

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 d'utiliser 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> 

I avoir les paramètres corrects dans mon settings.xml pour fournir des informations d'identification pour être en mesure de publier sur cette instance de test nexus qui tourne 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 version, qui est configuré pour interdire les instantanés.

La sortie de « mvn déployer » 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 

Répondre

5

Donc le meilleur indice s'est avéré être juste devant mes yeux dans la bûche. Le seul artefact que je pensais être produit par le POM avec lequel je travaillais était un .war, mais vous remarquerez dans le journal que l'artefact que Maven tente de déployer est en fait un .jar. Il suffisait d'un pointeur (que quelqu'un de la liste de diffusion des utilisateurs de Maven a pointé) pour rechercher et finalement trouver que quelqu'un avait inclus la configuration supplémentaire suivante pour la phase de déploiement. Notez que cela fait référence directement ${project.distributionManagement.repository.url}. En outre, cette configuration était quelque peu erronée et aurait dû être accomplie via la propriété attachClasses du plugin war.

2

Serait-ce parce que le artefact version n'a pas de suffixe -SNAPSHOT?

+0

La version d'artefact est-1.0.0 INSTANTANÉ, donc pas. – imaginaryboy

+1

Cette réponse devrait faire un commentaire, je pense –

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

    <deployFileUrl>${project.distributionManagement.snapshotRepository.url}</deployFileUrl> 
    
  2. Changer la configuration de maven-deploy-plugin 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 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. appellent enfin ce profil dans maven-release-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> 
    
Questions connexes