2009/11/28 Phil Steitz <phil.ste...@gmail.com>: > Niall Pemberton wrote: >> 2009/11/28 Phil Steitz <phil.ste...@gmail.com>: >>> Niall Pemberton wrote: >>>> 2009/11/27 Phil Steitz <phil.ste...@gmail.com>: >>>>> Niall Pemberton wrote: >>>>>> 2009/11/27 Phil Steitz <phil.ste...@gmail.com>: >>>>>>> Niall Pemberton wrote: >>>>>>>> On Fri, Nov 27, 2009 at 8:47 AM, Jörg Schaible <joerg.schai...@gmx.de> >>>>>>>> wrote: >>>>>>>>> Hi Grzegorz, >>>>>>>>> >>>>>>>>> Grzegorz Słowikowski wrote at Freitag, 27. November 2009 09:04: >>>>>>>>> >>>>>>>>>> Phil Steitz wrote: >>>>>>>>>>> Niall Pemberton wrote: >>>>>>>>>>> >>>>>>>>>> ... >>>>>>>>>>> Good points - so what is your recommendation? >>>>>>>>>>> >>>>>>>>>>> org.apache.commons:commons-dbcp4:1.3 >>>>>>>>>>> commons-dbcp:commons-dbcp:1.3 >>>>>>>>>>> >>>>>>>>>>> or >>>>>>>>>>> >>>>>>>>>>> org.apache.commons:commons-dbcp:1.3 >>>>>>>>>>> commons-dbcp:commons-dbcp:1.3 >>>>>>>>>>> >>>>>>>>>>> or >>>>>>>>>>> >>>>>>>>>>> org.apache.commons:commons-dbcp:1.4 >>>>>>>>>>> commons-dbcp:commons-dbcp:1.3 >>>>>>>>>>> >>>>>>>>>>> or? >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Phil >>>>>>>>>>> >>>>>>>>>> ... >>>>>>>>>> Think about war files, what you will have in WEB-INF/lib. You CANNOT >>>>>>>>>> have (accidentally, >>>>>>>>>> from transitive dependencies) commons-dbcp and commond-dbcp4 >>>>>>>>>> together in >>>>>>>>>> the class path, >>>>>>>>>> so the first proposal is not good. >>>>>>>>> This can happen for all three proposals. Since the groupId is >>>>>>>>> different >>>>>>>>> Maven handles the two artifacts in all three cases as unrelated. If >>>>>>>>> the >>>>>>>>> artifact name for two distinct artifacts clash, it will automatically >>>>>>>>> prepend the groupId for such cases like the war plugin. >>>>>>>>> >>>>>>>>> >>>>>>>>>> If you release jdbc3 and jdbc4 artifacts from the same release >>>>>>>>>> process >>>>>>>>>> (some code commented for >>>>>>>>>> jdbc3 version) - this is one release for me, so the version numbers >>>>>>>>>> should be identical. >>>>>>>>> Actually we have two incompatible versions. If someone depends (by >>>>>>>>> transitive deps or directly) on both versions, he has always a >>>>>>>>> problem. >>>>>>>>> Changing the groupId for one will simply expose the problem more >>>>>>>>> obviously, >>>>>>>>> because both jars will end up in the dependencies - otherwise Maven >>>>>>>>> version >>>>>>>>> resolution will silently chose one of them and drop the other one. >>>>>>>>> >>>>>>>>>> But I see you will probably prefer releasing separately and creating >>>>>>>>>> branch for 1.3.x patch releases. >>>>>>>>>> I would prefer this way too. In this situation we have version 1.3 >>>>>>>>>> backward compatible and version >>>>>>>>>> 1.4 not compatible. Because incompatibility comes not from your API >>>>>>>>>> changes but from changes >>>>>>>>>> inside Java API, then I say you don't have to change version >>>>>>>>>> numbering >>>>>>>>>> to 2.x.x (change on the >>>>>>>>>> first position). >>>>>>>>>> I don't remember what's going on inside Maven build of war artifact >>>>>>>>>> if >>>>>>>>>> you have two dependencies >>>>>>>>>> with different group ids and the same artifact ids. They are >>>>>>>>>> different >>>>>>>>>> artifacts and there is no >>>>>>>>>> version resolution between them. Maven war plugin prepares war >>>>>>>>>> content >>>>>>>>>> in "target/{artifactId}-{version}" directory before creating war >>>>>>>>>> file, >>>>>>>>>> so one of these files will >>>>>>>>>> overwrite the other I think. >>>>>>>>> As explained - no. >>>>>>>>> >>>>>>>>>> If some other build tool would create war archive on the fly, both >>>>>>>>>> files >>>>>>>>>> could be packaged >>>>>>>>>> because there are no constraints on unique file names inside >>>>>>>>>> jars/wars >>>>>>>>>> and this would be very bad! >>>>>>>>> Therefore we want to change the version for the JDBC version4, so we >>>>>>>>> end up >>>>>>>>> for those tools with two distinguishable names: commons-dbcp-1.3.jar >>>>>>>>> and >>>>>>>>> commons-dbcp-1.4.jar >>>>>>>>> >>>>>>>>>> Additionally I remember some discussions on Maven lists against >>>>>>>>>> relocations (some Apache >>>>>>>>>> Commons project changed its groupId to "org.apache.commons", and >>>>>>>>>> reverted this change very >>>>>>>>>> soon), but I don't remember the exact problem. Maybe you could ask >>>>>>>>>> Brett >>>>>>>>>> Porter or Jason val Zyl. >>>>>>>>> No relocations involved here. >>>>>>>>> >>>>>>>>>> IMHO the safest and most conservative naming convention would be: >>>>>>>>>> >>>>>>>>>> commons-dbcp:commons-dbcp:1.4 >>>>>>>>>> commons-dbcp:commons-dbcp:1.3 >>>>>>>>> No, because this would actually make the JDBC4 version available as an >>>>>>>>> upgrade for the JDBC3 one. This is the scenario we have to avoid. >>>>>>>> I really don't understand this - this is exactly the scenario we want. >>>>>>>> Doing it this way DBCP 1.4 will just be an upgrade for DBCP 1.3 with >>>>>>>> the additional methods introduced by JDBC 4. How is this any different >>>>>>>> from any later version of a component that adds additional methods and >>>>>>>> relies on the API of a later version of the JDK? >>>>>>> The problem is that it is not backward compatible. You can see this >>>>>>> using the test-jar.xml ant build in trunk. Build a jar using JDK >>>>>>> 1.6 and then try to build the tests and execute them against this >>>>>> I did, with the source/target set to JDK 1.6 - so the minimum JDK for >>>>>> DBCP 1.4 is JDK 1.6. That way anyone who wants to depend on DBCP 1.4 >>>>>> will have to be on JDK 1.6. The mistake IMO is to build DBCP 1.4 using >>>>>> JDK 1.6 while setting the source/traget JDK to < JDK 1.6 >>>>>> >>>>> Agreed, but those on 1.4 or 1.5 will still get runtime errors if >>>>> they inadvertently get "upgraded" unless I am missing something >>>>> here. Running against the 1.4 jar you posted, I now get bad class >>>>> file errors. >>>> For a project to depend on DBCP 1.4 then they will have to require JDK >>>> 1.6. Anyone who depends on that project will also therefore have to >>>> require JDK 1.6. I guess its probably possible to have a project built >>>> on JDK 1.6, but with a source/target set to a previous JDK and a >>>> dependency on DBCP 1.4 - but this is broken since with DBCP 1.4 it >>>> will (as you say) only ever run on JDK 1.6. >>>> >>>> Anyway, this is just a build issue that someone will have to sort out. >>>> If that could happen (which tbh I doubt) then they will just have to >>>> revert back to DBCP 1.3. This is true of any of our components that >>>> have "upgraded" their minimum JDK requirements. In this scenario >>>> though its not an issue because we will be providing a DBCP 1.3 >>>> solution that they can revert to that has all the fixes of DBCP 1.4, >>>> just without the JDBC 4 features. >>>> >>> Thanks, Niall. Sorry I was not clear and a little slow to come >>> around to seeing the full picture here. I now understand and agree >>> with the approach - including not changing the groupId - that you >>> have proposed. I have a couple of small things to fix and then I >>> will cut RCs for both 1.3 and 1.4. >> >> Great, let me know if theres anything you want me to do to help. >> >> When I created a test branch I added the following step to the ant >> build file to update the sources in place: >> >> http://tinyurl.com/ykhafzb >> >> Should we add this to build.xml in trunk? >> >> Niall > > I think adding this to the build.xml in trunk will be confusing. I > agree with Sebb that if we do that we need to comment it. Since we > are going to have to have a branch to cut the 1.3 release from and > we also need to change the version number in the build files there, > I was thinking it might be better to create a build.xml just for 1.3 > that eliminates the nojdbc4 stuff and executes the new goal as part > of the build. I am pretty sure the filtering operation is > idempotent, so should not be a problem executing repeatedly and this > would eliminate the possibility of forgetting to do it. This and > the modified (version change only) pom.xml would replace build.xml, > pom.xml in the branch. > > The process for cutting 1.3.1/1.4.1 would then be > 0) create a 1.3.1 branch from trunk > 1) copy build.xml, pom.xml from 1.3 branch (alternatively, we could > maintain build.xml.1.3, pom.xml.1.3 in trunk and rename in the branch). > 2) backport any pom or build.xml changes from trunk to the 1.3 > versions in the branch > 3) normal release stuff in trunk for 1.4, branch for 1.3
Sounds good to me. I don't mind either option for build.xml/pom.xml - whichever you prefer. Niall > Phil > >> >>> Phil >>> >>>>> Phil >>>>> >>>>> >>>>>> Niall >>>>>> >>>>>>> jar using 1.4 or 1.5 and you will get runtime errors. Sebb chased >>>>>>> >>>>>>> at least one of these down as being due to an import >>>>>>> (SQLClientInfoException) in the jdbc4 code. >>>>>>> >>>>>>> That is the reason I proposed changing the groupId, because I did >>>>>>> not want client apps to blow up with runtime errors when "latest >>>>>>> version" resolution of range specifiers grab 1.4 for them when they >>>>>>> are running jdk 1.4 or 1.5. >>>>>>> >>>>>>> Phil >>>>>>>> Niall >>>>>>>> >>>>>>>>>> In this situation JDBC4 version always wins. It means you know what >>>>>>>>>> version will land in your >>>>>>>>>> war file if you have both dependencies in your project and don't >>>>>>>>>> specify >>>>>>>>>> your preferred version >>>>>>>>>> in the pom.xml file. >>>>>>>>> No, if you know what you need, you can adjust the groupId for the >>>>>>>>> JDBC4 >>>>>>>>> version. If your dependencies still contains the other one, you have a >>>>>>>>> problem anyway. >>>>>>>>> >>>>>>>>> - Jörg --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org