You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Aaron Zeckoski <aa...@vt.edu> on 2007/11/14 23:44:32 UTC

How to control versioning across multiple POMs?

I have a series of 3 POMs and I need to be able to control versioning
across them. They are arranged like so:

master POM (parent of) base POM (parent of) project POM

There is one master and one base POM but there are many many project
POMs, roughly 50+ currently with new ones being added

The master POM has a version (as it seems all children must specify
the version of the parent correctly in the parent tag). The base POM
has no version as it inherits from the master. The problem here is
that we want to upgrade the overall version... except that every
project POM specifies the version of either the master or base POM (in
the parent tag). It means we have to somehow coordinate among 50+
projects (which are controlled by various people/groups) and tell them
to all change the version of the parent.

This is not ideal at all and I suspect we are just doing something
dumb or completely wrong. So, how can we control the overall version
for all the projects without having to change all of the POMs?

You can view the source here if you like:
master: https://source.sakaiproject.org/svn/master/trunk/pom.xml
base: https://source.sakaiproject.org/contrib/caret/kernel/pom.xml
sample project:
https://source.sakaiproject.org/contrib/caret/kernel/alias/pom.xml

-AZ


-- 
Aaron Zeckoski (aaronz@vt.edu)
Senior Research Engineer - CARET - Cambridge University
[http://bugs.sakaiproject.org/confluence/display/~aaronz/]
Sakai Fellow - [http://aaronz-sakai.blogspot.com/]

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org


Re: How to control versioning across multiple POMs?

Posted by Roland Asmann <Ro...@cfc.at>.
Well, I read in one of your other messages that you don't have access to the 
other projects and therefor can't use the release-plugin... I'm afraid that 
means you're pretty much stuck with manually updating these versions.

A possible work-around could be to write a Maven-plugin that updates all the 
versions...


On Thursday 15 November 2007 12:28, Aaron Zeckoski wrote:
> Currently the master POM keeps track of things like properties and a
> large set of shared dependencies (among other things).
> The base POM mostly maintains the set of modules (this POM is swapped
> out depending on what kind of release we are doing).
> The project POMs are effectively standalone except that they need the
> properties and shared dependencies from the master POM.
>
> Do you still think we should put the base and master together (based
> on what I said above)? The key issue here is that the projects need to
> be able to evolve separately and we want to be able to create
> different kinds of releases. A full release which includes all the
> projects, a partial release which includes roughly half of the
> projects, and mini release which includes the minimum set of projects
> for the system to run. Ideally each release has a separate version
> number.
>
> Currently, we are handling the multiple types of releases with new
> base POMs but we have no way to handle the versioning. I am open to
> completely changing things around as long as we can get the multiple
> types of releases and can control the versions.
>
> What is the most maintainable way to handle this?
> Thanks!
> -AZ
>
> On Nov 15, 2007 10:58 AM, Roland Asmann <Ro...@cfc.at> wrote:
> > Looking into your POMs, I think you should start using the release-plugin
> > (is you aren't already). Your only problem is that the 'master'-POM
> > doesn't know the 'base'-POM. (Seeing there's only 1 of both, why not
> > merge them?).
> >
> > When you use the 'modules'-tag in Maven, the versions are normally
> > updated by the release-plugin. So, I suggest you either add the 'base' as
> > a module in the 'master', or add a version-tag to the 'base', which can
> > then be easily released by Maven. In this last case however, you do need
> > to update the version of the 'master' inside the 'base' manually.
> >
> > It's the same case we have here in my company, we have a company-wide
> > master, which is not allowed to know all projects. If this POM gets
> > updated, we must manually update out projects. However, we do not HAVE to
> > do this, since some changes to the master might be irrelevant for some
> > projects. Therefor we stick with this method and let projects decide
> > whether or not to update. We do however send all employees a
> > release-mail, so they at least know there's a new version. Updating is
> > then discussed and decided within the projects.
> >
> > On Wednesday 14 November 2007 23:44, Aaron Zeckoski wrote:
> > > I have a series of 3 POMs and I need to be able to control versioning
> > > across them. They are arranged like so:
> > >
> > > master POM (parent of) base POM (parent of) project POM
> > >
> > > There is one master and one base POM but there are many many project
> > > POMs, roughly 50+ currently with new ones being added
> > >
> > > The master POM has a version (as it seems all children must specify
> > > the version of the parent correctly in the parent tag). The base POM
> > > has no version as it inherits from the master. The problem here is
> > > that we want to upgrade the overall version... except that every
> > > project POM specifies the version of either the master or base POM (in
> > > the parent tag). It means we have to somehow coordinate among 50+
> > > projects (which are controlled by various people/groups) and tell them
> > > to all change the version of the parent.
> > >
> > > This is not ideal at all and I suspect we are just doing something
> > > dumb or completely wrong. So, how can we control the overall version
> > > for all the projects without having to change all of the POMs?
> > >
> > > You can view the source here if you like:
> > > master: https://source.sakaiproject.org/svn/master/trunk/pom.xml
> > > base: https://source.sakaiproject.org/contrib/caret/kernel/pom.xml
> > > sample project:
> > > https://source.sakaiproject.org/contrib/caret/kernel/alias/pom.xml
> > >
> > > -AZ
> >
> > --
> > Roland Asmann
> >
> > CFC Informationssysteme Entwicklungsgesellschaft m.b.H
> > Bäckerstrasse 1/2/7
> > A-1010 Wien
> > FN 266155f, Handelsgericht Wien
> >
> > Tel.: +43/1/513 88 77 - 27
> > Fax.: +43/1/513 88 62
> > Email: Roland.Asmann@cfc.at
> > Web: www.cfc.at
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > For additional commands, e-mail: users-help@maven.apache.org

-- 
Roland Asmann

CFC Informationssysteme Entwicklungsgesellschaft m.b.H
Bäckerstrasse 1/2/7
A-1010 Wien
FN 266155f, Handelsgericht Wien

Tel.: +43/1/513 88 77 - 27
Fax.: +43/1/513 88 62
Email: Roland.Asmann@cfc.at
Web: www.cfc.at

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org


Re: How to control versioning across multiple POMs?

Posted by Aaron Zeckoski <aa...@vt.edu>.
Currently the master POM keeps track of things like properties and a
large set of shared dependencies (among other things).
The base POM mostly maintains the set of modules (this POM is swapped
out depending on what kind of release we are doing).
The project POMs are effectively standalone except that they need the
properties and shared dependencies from the master POM.

Do you still think we should put the base and master together (based
on what I said above)? The key issue here is that the projects need to
be able to evolve separately and we want to be able to create
different kinds of releases. A full release which includes all the
projects, a partial release which includes roughly half of the
projects, and mini release which includes the minimum set of projects
for the system to run. Ideally each release has a separate version
number.

Currently, we are handling the multiple types of releases with new
base POMs but we have no way to handle the versioning. I am open to
completely changing things around as long as we can get the multiple
types of releases and can control the versions.

What is the most maintainable way to handle this?
Thanks!
-AZ



On Nov 15, 2007 10:58 AM, Roland Asmann <Ro...@cfc.at> wrote:
> Looking into your POMs, I think you should start using the release-plugin (is
> you aren't already). Your only problem is that the 'master'-POM doesn't know
> the 'base'-POM. (Seeing there's only 1 of both, why not merge them?).
>
> When you use the 'modules'-tag in Maven, the versions are normally updated by
> the release-plugin. So, I suggest you either add the 'base' as a module in
> the 'master', or add a version-tag to the 'base', which can then be easily
> released by Maven. In this last case however, you do need to update the
> version of the 'master' inside the 'base' manually.
>
> It's the same case we have here in my company, we have a company-wide master,
> which is not allowed to know all projects. If this POM gets updated, we must
> manually update out projects. However, we do not HAVE to do this, since some
> changes to the master might be irrelevant for some projects. Therefor we
> stick with this method and let projects decide whether or not to update. We
> do however send all employees a release-mail, so they at least know there's a
> new version. Updating is then discussed and decided within the projects.
>
>
> On Wednesday 14 November 2007 23:44, Aaron Zeckoski wrote:
> > I have a series of 3 POMs and I need to be able to control versioning
> > across them. They are arranged like so:
> >
> > master POM (parent of) base POM (parent of) project POM
> >
> > There is one master and one base POM but there are many many project
> > POMs, roughly 50+ currently with new ones being added
> >
> > The master POM has a version (as it seems all children must specify
> > the version of the parent correctly in the parent tag). The base POM
> > has no version as it inherits from the master. The problem here is
> > that we want to upgrade the overall version... except that every
> > project POM specifies the version of either the master or base POM (in
> > the parent tag). It means we have to somehow coordinate among 50+
> > projects (which are controlled by various people/groups) and tell them
> > to all change the version of the parent.
> >
> > This is not ideal at all and I suspect we are just doing something
> > dumb or completely wrong. So, how can we control the overall version
> > for all the projects without having to change all of the POMs?
> >
> > You can view the source here if you like:
> > master: https://source.sakaiproject.org/svn/master/trunk/pom.xml
> > base: https://source.sakaiproject.org/contrib/caret/kernel/pom.xml
> > sample project:
> > https://source.sakaiproject.org/contrib/caret/kernel/alias/pom.xml
> >
> > -AZ
>
> --
> Roland Asmann
>
> CFC Informationssysteme Entwicklungsgesellschaft m.b.H
> Bäckerstrasse 1/2/7
> A-1010 Wien
> FN 266155f, Handelsgericht Wien
>
> Tel.: +43/1/513 88 77 - 27
> Fax.: +43/1/513 88 62
> Email: Roland.Asmann@cfc.at
> Web: www.cfc.at
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
>
>



-- 
Aaron Zeckoski (aaronz@vt.edu)
Senior Research Engineer - CARET - Cambridge University
[http://bugs.sakaiproject.org/confluence/display/~aaronz/]
Sakai Fellow - [http://aaronz-sakai.blogspot.com/]

Re: How to control versioning across multiple POMs?

Posted by Roland Asmann <Ro...@cfc.at>.
Looking into your POMs, I think you should start using the release-plugin (is 
you aren't already). Your only problem is that the 'master'-POM doesn't know 
the 'base'-POM. (Seeing there's only 1 of both, why not merge them?).

When you use the 'modules'-tag in Maven, the versions are normally updated by 
the release-plugin. So, I suggest you either add the 'base' as a module in 
the 'master', or add a version-tag to the 'base', which can then be easily 
released by Maven. In this last case however, you do need to update the 
version of the 'master' inside the 'base' manually.

It's the same case we have here in my company, we have a company-wide master, 
which is not allowed to know all projects. If this POM gets updated, we must 
manually update out projects. However, we do not HAVE to do this, since some 
changes to the master might be irrelevant for some projects. Therefor we 
stick with this method and let projects decide whether or not to update. We 
do however send all employees a release-mail, so they at least know there's a 
new version. Updating is then discussed and decided within the projects.


On Wednesday 14 November 2007 23:44, Aaron Zeckoski wrote:
> I have a series of 3 POMs and I need to be able to control versioning
> across them. They are arranged like so:
>
> master POM (parent of) base POM (parent of) project POM
>
> There is one master and one base POM but there are many many project
> POMs, roughly 50+ currently with new ones being added
>
> The master POM has a version (as it seems all children must specify
> the version of the parent correctly in the parent tag). The base POM
> has no version as it inherits from the master. The problem here is
> that we want to upgrade the overall version... except that every
> project POM specifies the version of either the master or base POM (in
> the parent tag). It means we have to somehow coordinate among 50+
> projects (which are controlled by various people/groups) and tell them
> to all change the version of the parent.
>
> This is not ideal at all and I suspect we are just doing something
> dumb or completely wrong. So, how can we control the overall version
> for all the projects without having to change all of the POMs?
>
> You can view the source here if you like:
> master: https://source.sakaiproject.org/svn/master/trunk/pom.xml
> base: https://source.sakaiproject.org/contrib/caret/kernel/pom.xml
> sample project:
> https://source.sakaiproject.org/contrib/caret/kernel/alias/pom.xml
>
> -AZ

-- 
Roland Asmann

CFC Informationssysteme Entwicklungsgesellschaft m.b.H
Bäckerstrasse 1/2/7
A-1010 Wien
FN 266155f, Handelsgericht Wien

Tel.: +43/1/513 88 77 - 27
Fax.: +43/1/513 88 62
Email: Roland.Asmann@cfc.at
Web: www.cfc.at

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org


Re: How to control versioning across multiple POMs?

Posted by Ro...@toyota.com.au.
Sorry Arron, I have missed that section of your mail. Yes you do need 
commit access across all project. I think it is reasonable that if you 
don't have commit access to all the projects then you need to manually 
coordinate the change with everyone. It is a pain so commit access can 
solve the problem very easily. If it is a politically sensitive thing to 
gain this access you could try to configure your source control to only 
give you access to pom.xml.

Also, looking at your poms, I think  you have a very non conventional 
setup. You have alot of dependencies setup in the parent pom with provided 
scope - those dependencies also seems to be artifacts of your child 
projects. To be honest, I'm really confused about the structure of your 
poms. Have you converted this Maven project structure from Ant? How have 
you managed to perform a release of your software without a the use of 
release plugin? I can't imagine how your build will work as it is like 
chicken and egg problem - i.e., you need all the artifacts of the 50+ 
modules before you even get to build all of them.

The release tag helps you to increment -SNAPSHOT version to non snapshot. 
It then tag the code and pull the code out for a clean build which it's 
artifacts then gets deployed to the repository. The pom version and parent 
pom version is then incremented back to the next -SNAPSHOT ready for 
development again. Basically it automates the manual work of tagging, 
incrementing version numbers, commiting to source control and releasing 
your software version.

${project.version} just refers to the version of the pom - this is a 
built-in facility of Maven to reference various element value with the 
pom.

Cheers,
rOnn c.







"Aaron Zeckoski" <az...@gmail.com> 
11/15/2007 08:27 PM
Please respond to
"Maven Users List" <us...@maven.apache.org>


To
Ronn.Chinowutthichai@toyota.com.au
cc
"Maven Users List" <us...@maven.apache.org>
Subject
Re: How to control versioning across multiple POMs?






> Do you use release plugin?
>
> The release plugin should increment the version of the parent pom and 
the
> pom itself for you.


If you mean this one:
http://maven.apache.org/plugins/maven-release-plugin/index.html
No. I had a hard time understanding what it actually does from the
docs and it seems like I would need commit access to all the
sub-projects (which I do not have).


> If you have dependencies to sibling pom in your dependencies 
declaration,
> I'd use <version>${project.version}</version> to get around the problem 
that
> the release tag won't increment the version back to snapshot.

What do you mean? Where would I specify this property? In the master
POM? Is this a special property in maven2?


> I have a series of 3 POMs and I need to be able to control versioning
> across them. They are arranged like so:
>
> master POM (parent of) base POM (parent of) project POM
>
> There is one master and one base POM but there are many many project
> POMs, roughly 50+ currently with new ones being added
>
> The master POM has a version (as it seems all children must specify
> the version of the parent correctly in the parent tag). The base POM
> has no version as it inherits from the master. The problem here is
> that we want to upgrade the overall version... except that every
> project POM specifies the version of either the master or base POM (in
> the parent tag). It means we have to somehow coordinate among 50+
> projects (which are controlled by various people/groups) and tell them
> to all change the version of the parent.
>
> This is not ideal at all and I suspect we are just doing something
> dumb or completely wrong. So, how can we control the overall version
> for all the projects without having to change all of the POMs?
>
> You can view the source here if you like:
> master: https://source.sakaiproject.org/svn/master/trunk/pom.xml
> base: https://source.sakaiproject.org/contrib/caret/kernel/pom.xml
> sample project:
> https://source.sakaiproject.org/contrib/caret/kernel/alias/pom.xml
>
> -AZ
>
>
> --
> Aaron Zeckoski (aaronz@vt.edu)
> Senior Research Engineer - CARET - Cambridge University
> [http://bugs.sakaiproject.org/confluence/display/~aaronz/]
> Sakai Fellow - [http://aaronz-sakai.blogspot.com/]
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
>
>
>
>
> ##########################################################
> DISCLAIMER:
> This email and any attachment may contain confidential information.
> If you are not the intended recipient you are not authorized to copy
> or disclose all or any part of it without the prior written consent
> of Toyota.
>
> Opinions expressed in this email and any attachments are those of the
> sender and not necessarily the opinions of Toyota.
> Please scan this email and any attachment(s) for viruses.
> Toyota does not accept any responsibility for problems caused by
> viruses, whether it is Toyota's fault or not.
> ##########################################################



-- 
Aaron Zeckoski (aaronz@vt.edu)
Senior Research Engineer - CARET - Cambridge University
[http://bugs.sakaiproject.org/confluence/display/~aaronz/]
Sakai Fellow - [http://aaronz-sakai.blogspot.com/]

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org



######################################################################
DISCLAIMER:
This email and any attachment may contain confidential information.
If you are not the intended recipient you are not authorized to copy
or disclose all or any part of it without the prior written consent
of Toyota.

Opinions expressed in this email and any attachments are those of the
sender and not necessarily the opinions of Toyota.
Please scan this email and any attachment(s) for viruses.
Toyota does not accept any responsibility for problems caused by
viruses, whether it is Toyota's fault or not.
######################################################################

Re: How to control versioning across multiple POMs?

Posted by Aaron Zeckoski <az...@gmail.com>.
> Do you use release plugin?
>
> The release plugin should increment the version of the parent pom and the
> pom itself for you.


If you mean this one:
http://maven.apache.org/plugins/maven-release-plugin/index.html
No. I had a hard time understanding what it actually does from the
docs and it seems like I would need commit access to all the
sub-projects (which I do not have).


> If you have dependencies to sibling pom in your dependencies declaration,
> I'd use <version>${project.version}</version> to get around the problem that
> the release tag won't increment the version back to snapshot.

What do you mean? Where would I specify this property? In the master
POM? Is this a special property in maven2?


> I have a series of 3 POMs and I need to be able to control versioning
> across them. They are arranged like so:
>
> master POM (parent of) base POM (parent of) project POM
>
> There is one master and one base POM but there are many many project
> POMs, roughly 50+ currently with new ones being added
>
> The master POM has a version (as it seems all children must specify
> the version of the parent correctly in the parent tag). The base POM
> has no version as it inherits from the master. The problem here is
> that we want to upgrade the overall version... except that every
> project POM specifies the version of either the master or base POM (in
> the parent tag). It means we have to somehow coordinate among 50+
> projects (which are controlled by various people/groups) and tell them
> to all change the version of the parent.
>
> This is not ideal at all and I suspect we are just doing something
> dumb or completely wrong. So, how can we control the overall version
> for all the projects without having to change all of the POMs?
>
> You can view the source here if you like:
> master: https://source.sakaiproject.org/svn/master/trunk/pom.xml
> base: https://source.sakaiproject.org/contrib/caret/kernel/pom.xml
> sample project:
> https://source.sakaiproject.org/contrib/caret/kernel/alias/pom.xml
>
> -AZ
>
>
> --
> Aaron Zeckoski (aaronz@vt.edu)
> Senior Research Engineer - CARET - Cambridge University
> [http://bugs.sakaiproject.org/confluence/display/~aaronz/]
> Sakai Fellow - [http://aaronz-sakai.blogspot.com/]
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
>
>
>
>
> ##########################################################
> DISCLAIMER:
> This email and any attachment may contain confidential information.
> If you are not the intended recipient you are not authorized to copy
> or disclose all or any part of it without the prior written consent
> of Toyota.
>
> Opinions expressed in this email and any attachments are those of the
> sender and not necessarily the opinions of Toyota.
> Please scan this email and any attachment(s) for viruses.
> Toyota does not accept any responsibility for problems caused by
> viruses, whether it is Toyota's fault or not.
> ##########################################################



-- 
Aaron Zeckoski (aaronz@vt.edu)
Senior Research Engineer - CARET - Cambridge University
[http://bugs.sakaiproject.org/confluence/display/~aaronz/]
Sakai Fellow - [http://aaronz-sakai.blogspot.com/]

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org


Re: How to control versioning across multiple POMs?

Posted by Ro...@toyota.com.au.
Hi Aaron,

Do you use release plugin? 

The release plugin should increment the version of the parent pom and the 
pom itself for you.

If you have dependencies to sibling pom in your dependencies declaration, 
I'd use <version>${project.version}</version> to get around the problem 
that the release tag won't increment the version back to snapshot.

Cheers,
rOnn c.





"Aaron Zeckoski" <aa...@vt.edu> 
Sent by: azeckoski@gmail.com
11/15/2007 09:44 AM
Please respond to
"Maven Users List" <us...@maven.apache.org>


To
"Maven Users List" <us...@maven.apache.org>
cc

Subject
How to control versioning across multiple POMs?






I have a series of 3 POMs and I need to be able to control versioning
across them. They are arranged like so:

master POM (parent of) base POM (parent of) project POM

There is one master and one base POM but there are many many project
POMs, roughly 50+ currently with new ones being added

The master POM has a version (as it seems all children must specify
the version of the parent correctly in the parent tag). The base POM
has no version as it inherits from the master. The problem here is
that we want to upgrade the overall version... except that every
project POM specifies the version of either the master or base POM (in
the parent tag). It means we have to somehow coordinate among 50+
projects (which are controlled by various people/groups) and tell them
to all change the version of the parent.

This is not ideal at all and I suspect we are just doing something
dumb or completely wrong. So, how can we control the overall version
for all the projects without having to change all of the POMs?

You can view the source here if you like:
master: https://source.sakaiproject.org/svn/master/trunk/pom.xml
base: https://source.sakaiproject.org/contrib/caret/kernel/pom.xml
sample project:
https://source.sakaiproject.org/contrib/caret/kernel/alias/pom.xml

-AZ


-- 
Aaron Zeckoski (aaronz@vt.edu)
Senior Research Engineer - CARET - Cambridge University
[http://bugs.sakaiproject.org/confluence/display/~aaronz/]
Sakai Fellow - [http://aaronz-sakai.blogspot.com/]

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org



######################################################################
DISCLAIMER:
This email and any attachment may contain confidential information.
If you are not the intended recipient you are not authorized to copy
or disclose all or any part of it without the prior written consent
of Toyota.

Opinions expressed in this email and any attachments are those of the
sender and not necessarily the opinions of Toyota.
Please scan this email and any attachment(s) for viruses.
Toyota does not accept any responsibility for problems caused by
viruses, whether it is Toyota's fault or not.
######################################################################