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: [email protected]
> 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: [email protected]
>>> 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: [email protected]
>>>> 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]