Romain Grécourt wrote on 10/16/18 04:08 PM:
    
      
      
        
          
            
            
               Romain Grécourt wrote on 10/12/18
                01:06 PM:
                
                  
                    
                      
                        Have a look at the
                          nexus-staging-maven-plugin.
                          
                         
                     
                   
                
                There's way too many options and choices there.  I'm
                really hoping someone else who really understands this
                stuff has figured out exactly how to do this for our
                Eclipse projects.
                
                
                  
                    
                      
                        
                          
                          
                          
                                        <plugin>
                                           
                              <groupId>org.sonatype.plugins</groupId>
                                           
                              <artifactId>nexus-staging-maven-plugin</artifactId>
                                           
                              <extensions>true</extensions>
                                            <configuration>
                                               
                              <serverId>ossrh</serverId>
                            
                                            </configuration>
                                        </plugin>
                           
                          
                          
                          You can configure the plugin to
                            automatically release the staging repository
                            (autoReleaseAfterClose=true).
                          I.e, this makes the nexus workflow
                            transparent.
                         
                       
                     
                   
                
                I assume we 
don't want to do this because we
                need to wait for Release Review approval before
                releasing the staged artifacts.
                
                
                  
                    
                      
                        
                          You could also implement the workflow
                            manually. (skipStagingRepositoryClose=true)
                            
                          
                         
                       
                     
                   
                
                I assume this is what we want.  Is this not the default?
              
            
            
            The way I understand it the default configuration of
              the plugin will leave with a closed staging repository.
           
         
       
    
    Is there some reason I shouldn't want it to be closed
    automatically?  As long as it's not released, that seems fine.
    
    What can I do with it when it's not closed, other than close it?
You can update the content of the staging repository, i.e deploy more artifacts, delete artifacts.
 
    
    
      
        
          
            
            
            
               
                
                  
                    
                      
                        
                          It would look like something like this:
                          
                          
                          
                            # Create the nexus staging repository
                            STAGING_DESC="Project ACME
                              v${FULL_VERSION}"
                            mvn nexus-staging:rc-open \
                              -DstagingProfileId=6026dab46eed94 \
                             
                              -DstagingDescription="${STAGING_DESC}"
                           
                         
                       
                     
                   
                
                Where does the stagingProfileId come from?
              
 
            
            
            
            
           
         
       
    
    Of course I had to create a Jenkins job to use rc-list-profiles.
 
:D
 
  I
    got this:
    
    [INFO]  * Connected to Nexus at https://oss.sonatype.org:443/, is version 2.14.10-01 and edition "Professional"
[INFO] Getting list of available staging profiles...
[INFO] 
[INFO] ID              Mode   Name                          
[INFO] 7edbe315063867  BOTH   Central Bundles               
[INFO] 70fc011e3d589e  BOTH   jakarta.activation            
    
    Does that mean I can hard code "70fc011e3d589e" in my script and
    never need to change it (as long as my groupId doesn't change)?
Yes.
Unless for some reason the staging profile is re-created for the same groupId.
 
    
    
      
        
          
             
            
               
                How often do I need to create the staging repository? 
                Once ever?  Every time I want to stage something new?
              
            
            
            
            Every time you deploy. Without using this plugin, nexus
              creates one on the fly.
            This is why on 
maven.java.net you had to go
              to nexus and then close/release.
            
            
               
                
                  
                    
                      
                        
                          
                            STAGING_REPO_ID=$(mvn
                              nexus-staging:rc-list | \
                              egrep "^\[INFO\] orgacme\-[0-9]+[
                              ]+OPEN[ ]+${STAGING_DESC}" | \
                              awk '{print $2}' | head -1)
                           
                         
                       
                     
                   
                
                What is "orgacme" above?
              
 
            
            This is the profile name. I got that value with
              rc-list-profiles (see above).
           
         
       
    
    In my case it's "jakartaactivation" (no dots).  I suppose it's
    derived from the groupId?
 
Yes.
 
    
    
      
        
          
            
               
                
                  
                    
                      
                        
                          
                            # Perform deployment
                            mvn deploy
                              -DstagingRepositoryId=${STAGING_REPO_ID}
                            
                            
                            # Close and release the nexus staging
                              repository
                            
                            mvn nexus-staging:rc-close
                              nexus-staging:rc-release \
                             
                              -DstagingRepositoryId=${STAGING_REPO_ID} \
                             
                              -DstagingDescription="${STAGING_DESC}"
                           
                         
                       
                     
                   
                
                Can I put the above in a Jenkins job separate from the
                "mvn deploy" command?  I'm not clear on what the
                lifetime is of the value in STAGING_REPO_ID.  If I
                compute it once in the "mvn deploy" job and again in the
                "rc-release" job, will it have the same value? 
 
            
            
            
            Yes, you could automate the workflow with a difference
              job. 
            Note that here I'm expecting only one staging
              repository so I grab the first one.
            
            
            We could think of a convention in the staging
              repository description and match that with a parameter on
              the job.
            E.g This job takes a version as parameter and the
              script uses that to match the right repository and
              complete the workflow.
           
         
       
    
    Can there be multiple staging repos for the same artifact?
 
An artifact (GAV) has to be unique.
If you attempt to deploy an artifact that already exists, you won't be able to close the staging repository. 
However, if you have duplicate artifacts in different "open" staging repository, you will be able to close the first.
The 2nd one will fail with a validation error about the duplicate GAV.
    
    If I forget to release or drop one, that would be a problem.  I
    guess I should iterate over all the repos and close drop them all
    before creating a new one.
Assuming there is only one release at a time may not be true if there are multiple active code lines.
My take on this would be to simply match the right repository based on the description.
 
    
    Ok, I'm getting pretty close to getting this working (I think).  Now
    I just need to get permission to deploy org.eclipse.activation and
    org.eclipse.mail groupIds (since we seem to have decided to stop
    using com.sun.*).