Hi Juri,

This is great - but you may need to clarify legally how you are releasing
this code (if at all), if it's to be considered for Maven (i.e. Apache
commons license etc - could someone clarify what it would have to be?). 

If not, it's food for thought - thanks! :)


Artamonov, Juri wrote:
> 
> Hi Guys,
> 
> Here is the plugin I wrote and use to distinguish two different
> snapshots.
> The properties I get and put into projectProperties can be used for
> example in Manifest.mf file storing build number or any other useful
> information. I would be glad if it helps you on your items.
> 
> 
> package com.fusionone.plugins;
> 
> 
> import org.apache.maven.artifact.Artifact;
> import org.apache.maven.artifact.manager.WagonManager;
> import org.apache.maven.artifact.repository.ArtifactRepository;
> import org.apache.maven.artifact.repository.metadata.Metadata;
> import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
> import
> org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
> import
> org.apache.maven.artifact.repository.metadata.RepositoryMetadataResoluti
> onException;
> import
> org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepository
> Metadata;
> import org.apache.maven.plugin.AbstractMojo;
> import org.apache.maven.plugin.MojoExecutionException;
> import org.apache.maven.plugin.MojoFailureException;
> import org.apache.maven.project.MavenProject;
> import org.codehaus.plexus.util.StringUtils;
> 
> import java.io.File;
> import java.text.SimpleDateFormat;
> import java.util.Date;
> import java.util.Iterator;
> import java.util.List;
> 
> 
> /**
>  * Goal which get new build number version.
>  *
>  * @goal create
>  * @phase compile
>  */
> public class BuildNumberMojo
>     extends AbstractMojo
> {
>     /**
>      * Location of the file.
>      * @parameter expression="${project.build.directory}"
>      * @required
>      */
>     private File outputDirectory;
>     /**
>      * The maven project.
>      *
>      * @parameter expression="${project}"
>      * @required
>      * @readonly
>      */
>     private MavenProject project; 
>     
>     /**
>      * @parameter expression="${project.artifact}"
>      * @required
>      * @readonly
>      */
>     private Artifact artifact;
>     
>     /**
>      * Local maven repository.
>      * 
>      * @parameter expression="${localRepository}"
>      * @required
>      * @readonly
>      */
>     protected ArtifactRepository localRepository;
> 
>     /**
>      * Remote repositories which will be searched for source
> attachments.
>      * 
>      * @parameter expression="${project.remoteArtifactRepositories}"
>      * @required
>      * @readonly
>      */
>     protected List remoteArtifactRepositories;
>     
>     private WagonManager wagonManager;
> 
>     /**
>      * Repository meta data.
>      * 
>      * @component
> role="org.apache.maven.artifact.repository.metadata.RepositoryMetadataMa
> nager"
>      * @required
>      * @readonly
>      */
>            
>     protected RepositoryMetadataManager repositoryMetadataManager;
>     
>     public void execute() throws MojoExecutionException,
> MojoFailureException { 
>       
>         
>         String buildNumber = null;
>         String date = null;
>         try
>         {
>             buildNumber = resolveLatestSnapshotBuildNumber( artifact,
> localRepository, remoteArtifactRepositories );
>             SimpleDateFormat sdf = new SimpleDateFormat();
>             date = sdf.format(new Date());            
>         }
>         catch (RepositoryMetadataResolutionException e)
>         {
>             e.printStackTrace();
>         }
>         
>         if ( project != null )
>             {
>                 getLog().info( "Storing buildNumber: " + buildNumber );
>                 project.getProperties().put("buildNumber", buildNumber);
>                 project.getProperties().put("date", date);
>                 
>             }                     
>     }
>     
>     public void execute(Artifact artifact, ArtifactRepository
> localRepository, List remoteArtifactRepositories,
>               MavenProject project, RepositoryMetadataManager
> repositoryMetadataManager) throws MojoExecutionException,
> MojoFailureException
>       {
>       this.artifact = artifact;
>       this.localRepository = localRepository;
>       this.remoteArtifactRepositories = remoteArtifactRepositories;
>       this.project = project;
>       this.repositoryMetadataManager = repositoryMetadataManager;
>       execute();
>       }
>       
>     private String resolveLatestSnapshotBuildNumber( Artifact artifact,
> ArtifactRepository localRepository,
>         List  remoteRepositories )
>         throws RepositoryMetadataResolutionException
>     {
>         ArtifactRepository remoteRepository = null;
>       RepositoryMetadata metadata = new
> SnapshotArtifactRepositoryMetadata( artifact );
>         for (Iterator it = remoteRepositories.iterator(); it.hasNext();)
>         {
>             remoteRepository = (ArtifactRepository) it.next();
>             repositoryMetadataManager.resolveAlways( metadata,
> localRepository, remoteRepository);
>         }
>         
> //        repositoryMetadataManager.resolveAlways( metadata,
> localRepository, remoteRepository);
> 
>         int buildNumber = 0;
>         Metadata repoMetadata = metadata.getMetadata();
>         if ( ( repoMetadata != null )
>             && ( repoMetadata.getVersioning() != null &&
> repoMetadata.getVersioning().getSnapshot() != null ) )
>         {
>             //getLog().info( "timestamp " +
> repoMetadata.getVersioning().getSnapshot().getTimestamp() );
>             buildNumber =
> repoMetadata.getVersioning().getSnapshot().getBuildNumber();
>         }
>         return constructBuildNumber(buildNumber,
> artifact.getBaseVersion());
>     }
> 
>     private String constructBuildNumber(int buildNumber, String
> baseVersion)
>     {
>         buildNumber = buildNumber + 1;
>         return StringUtils.replace(baseVersion, "-SNAPSHOT", "." +
> String.valueOf(buildNumber)); 
>     }
>         
> }
> 
> Best regards,
>                      Juri.
> 
> -----Original Message-----
> From: Antony Stubbs [mailto:[EMAIL PROTECTED] 
> Sent: Tuesday, August 07, 2007 3:43 AM
> To: users@maven.apache.org
> Subject: RE: Auto incrementing a build identifier
> 
> 
> I have submitted a jira issue [1] - let's see what response we get...
> 
> A work around I am going to try, is pretty much ignoring the build
> number
> that deploy generates, and instead rely on time stamps. E.g. I will use
> the
> timestamp generated by build number plugin in a properties file to
> display
> in the application - this should match up with the build timestamp used
> by
> deploy. I will have to make sure the build number plugin uses 0 GMT
> though.
> 
> [1] http://jira.codehaus.org/browse/MDEPLOY-60
> 
> 
> Antony Stubbs wrote:
>> 
>> Apparently you can do that ( I haven't tried it ) using the
>> build-number-plugin, but again, not into the _deploy_ artefact. That
>> plugin still has it's own system for putting a build number in the
> file
>> name. it's a real pity - I wonder how this hasn't been addressed in
> the
>> past.
>> I mean, what do most people do to represent the current running build
> of a
>> snapshot, inside the application, and in the filename?
>> 
>> 
>> John Coleman-6 wrote:
>>> 
>>> That certainly gets my vote - just last week I was thinking it might
> be
>>> handy to incorporate the subversion revision number in the artefact
>>> name.
>>> 
>>> John
>>> 
>>> -----Original Message-----
>>> From: Antony Stubbs [mailto:[EMAIL PROTECTED] 
>>> Sent: 05 August 2007 11:42
>>> To: users@maven.apache.org
>>> Subject: RE: Auto incrementing a build identifier
>>> 
>>> 
>>> That's exactly what M2 needs - would you consider releasing your
> mojo?
>>> I'd
>>> love to try using.
>>> IMO this should be apart of the m2 deploy goal.
>>> 
>>> The problem with Mavin buildnumber plugin, is that it isn't synced
> with
>>> the
>>> build number repository.
>>> 
>>> 
>>> Artamonov, Juri wrote:
>>>> 
>>>>>The thing is that I don't want to generate "new" builds during
>>>> development, overwriting the current snapshot is preferred. But when
>>>> processing a project which will be "publicly" available, I want to
> be
>>>> able to identify it >(even a snapshot) with an incremented build
>>> number,
>>>> but without having to manage the version setting by hand.
>>>> 
>>>> IMHO, this is (I mean let's say snapshot numbering) not yet covered
>>> well
>>>> in m2.
>>>> 
>>>> I have requirement also for myself to distunguish two snapshot
> builds
>>>> and here is what I did...
>>>> 
>>>> 1. I use maestro stuff with continuum and m2. When I do install I
> have
>>>> files like 1.0-SNPASHOT-<BUILD_NUMBER> in repository. BUILD_NUMBER
> is
>>>> always inrementing on 1 when new version is installed into
> repository.
>>>> 2. I wrote the plugin which get latest BUILD_NUMBER from repository
>>> and
>>>> do +1 during for example compile phase. Now I know what build
> version
>>> is
>>>> going to be and I put this information into manifest file or war
> file
>>> or
>>>> for example jar file. Now I have information inside of the archive
>>> that
>>>> allows me to distinguish two snapshot versions.
>>>> 
>>>> Also you can use
>>>> http://commons.ucalgary.ca/projects/maven-buildnumber-plugin/ plugin
>>> but
>>>> seems having it working requires a lot of manual work, due missing
>>>> versions on the repositories of the components listed in the
>>>> dependencies.
>>>> 
>>>> Best regards,
>>>>                               Juri.
>>>> 
>>>> -----Original Message-----
>>>> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
>>>> Sent: Friday, September 22, 2006 8:30 PM
>>>> To: users@maven.apache.org
>>>> Subject: Auto incrementing a build identifier
>>>> 
>>>> 
>>>> A question about version numbering in Subversion.
>>>> 
>>>> I am aware of the way subversion handles version information while
>>>> releasing. As I have peeked overhere in the Maven repository:
>>>> 
>>>>
>>>
> https://svn.apache.org/repos/asf/maven/plugins/tags/maven-release-plugin
>>>>
>>>
> -2.0-beta-4/src/main/java/org/apache/maven/plugins/release/versions/Defa
>>>> ultVersionInfo.java
>>>> 
>>>> Now I am wondering about something. My current contract would like a
>>>> build increment value in between two brackets. Which auto increases
>>> with
>>>> each build delivered to production. I'd say that hooking into the
>>> deploy
>>>> phase would be a good time for such actions. But then I figure that
> it
>>>> isn't.
>>>> 
>>>> I'd say the initialize phase is the correct one. Since I am not
>>>> processing resources or sources but the POM.xml. The thing is this,
>>> can
>>>> I modify the POM then and there and keep the build going or do I
> need
>>> to
>>>> modify the POM. And let the user start another run, just like the
>>>> release plugin does?
>>>> 
>>>> Also, is it possible (by documented API or acceptable convention) to
>>>> detect whether or not a build is running up to or past the deploy
>>> phase?
>>>> 
>>>> The thing is that I don't want to generate "new" builds during
>>>> development, overwriting the current snapshot is preferred. But when
>>>> processing a project which will be "publicly" available, I want to
> be
>>>> able to identify it (even a snapshot) with an incremented build
>>> number,
>>>> but without having to manage the version setting by hand.
>>>> 
>>>> Any suggestions are greatly apreciated.
>>>> 
>>>> Kind regards,
>>>> Jeroen Leenarts
>>>> http://blog.leenarts.net
>>>> 
>>>> Download this as a file
>>>> 
>>>> 
>>>>
> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>> 
>>>> 
>>>>
> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>> 
>>>> 
>>>> 
>>> 
>>> -- 
>>> View this message in context:
>>>
> http://www.nabble.com/Auto-incrementing-a-build-identifier-tf2319084s177
>>> .html#a12003652
>>> Sent from the Maven - Users mailing list archive at Nabble.com.
>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>> 
>>> 
>>> Eurobase International Limited and its subsidiaries (Eurobase) are
> unable
>>> to exercise control over the content of information in E-Mails. Any
> views
>>> and opinions expressed may be personal to the sender and are not
>>> necessarily those of Eurobase. Eurobase will not enter into any
>>> contractual obligations in respect of any part of its business in any
>>> E-mail. 
>>> 
>>> Privileged / confidential information may be contained in this
> message
>>> and /or any attachments. This E-mail is intended for the use of the
>>> addressee(s) only and may contain confidential information. If you
> are
>>> not the / an intended recipient, you are hereby notified that any use
> or
>>> dissemination of this communication is strictly prohibited.  If you
>>> receive this transmission in error, please notify us immediately, and
>>> then delete this E-mail. 
>>> 
>>> Neither the sender nor Eurobase accepts any liability whatsoever for
> any
>>> defects of any kind either in or arising from this E-mail
> transmission.
>>> E-Mail transmission cannot be guaranteed to be secure or error-free,
> as
>>> messages can be intercepted, lost, corrupted, destroyed, contain
> viruses,
>>> or arrive late or incomplete. Eurobase does not accept any
> responsibility
>>> for viruses and it is your responsibility to scan any attachments.
>>> 
>>> Eurobase Systems Limited is the main trading company in the Eurobase
>>> International Group; registered in England and Wales as company
> number
>>> 02251162; registered address: Essex House, 2 County Place,
> Chelmsford,
>>> Essex CM2 0RE, UK.
>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>> 
>>> 
>>> 
>> 
>> 
> 
> -- 
> View this message in context:
> http://www.nabble.com/Auto-incrementing-a-build-identifier-tf2319084s177
> .html#a12026703
> Sent from the Maven - Users mailing list archive at Nabble.com.
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Auto-incrementing-a-build-identifier-tf2319084s177.html#a12049162
Sent from the Maven - Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to