struts-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Don Brown" <>
Subject Re: API Compatibility
Date Thu, 21 Feb 2008 22:32:51 GMT
Here are my two points:
 1. Our current versioning scheme requires patch versions for all
releases, regardless of quality
 2. We need to be able to do "alpha" releases to get new, experimental
features into the community for testing

These two points, put together, will necessarily result in a 2.1.0
release that is drastically different than 2.1.1.  I just don't see
any way around that.

As for your other point about dependencies, well, that problem goes
away once the convention plugin is bundled with Struts, because it
will then have the same version number and will necessarily be
compatibility with its counterparts in that release.

As for third-party plugins, yes, that is an issue, but I don't see how
it is any different than any other library.  My app depends on
Velocity 1.5, but a library I use depends on Velocity 1.4, so problems
could arise.  We have this all the time in the projects I work on, so
I don't see how Struts is unique here.


On 2/22/08, Brian Pontarelli <> wrote:
>  Don Brown wrote:
>  > Well said, and I completely agree.  My original point is your point #1
>  > just isn't possible with the current versioning scheme.  Because every
>  > release gets its own patch number, regardless of quality or API
>  > changes, it can't be counted on, and really, I don't see any solution
>  > other than creating a big matrix of releases for users to somehow
>  > navigate the sea of releases to understand which are compatible with
>  > the other.
>  >
> I agree with you on that. It is difficult. However, it doesn't mean that
>  a person or tool couldn't check the public APIs for changes prior to
>  doing a release. The release would not ever occur and remain in
>  -SNAPSHOT until those broken APIs are fixed.
>   From the other thread:
>  > I do agree we need to be much better about how much of our API we
>  > expose to developers, but I think the question of public vs private
>  > API goes beyond the Java semantics and into what a typical Struts user
>  > will encounter.   Unless you are a plugin or framework developer, it
>  > would be very rare for you to be creating configuration objects, so
>  > yes, while these are technically public, I'd certainly call them more
>  > private than, say, the Action interface.
>  It is actually more complex than I think you realize. Here is another dependency graph
that reveals a really bad issue:
>  Project A -> struts 2.0.6
> Project A -> library B
>  Project A -> library C
>  library B -> convention-plugin 2.0.6 -> struts 2.0.6
>  library C -> struts 2.1.1
>  This graph is broken because the build will decide that 2.1.1 is the latest and most
correct version of Struts to use and put that in the classpath. However, the API changes in
2.1.1 break the convention plugin. BUT struts 2.1.1 doesn't depend on the convention plugin
2.1.1 and therefore the build is incapable of warning the user that things are broken and
cannot manage this graph correctly.
>  So, any public APIs need to be managed and when you introduce transitive dependencies,
things get complex. Applications will break, even if they don't use those public APIs directly.
>  -bp
>  ---------------------------------------------------------------------
>  To unsubscribe, e-mail:
>  For additional commands, e-mail:

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message