Hello, Thank you all for your feedback. What I'm hearing here is that binary compatibility is vital between releases but source compatibility can be changed with proper documentation and notifications. This is good to know. For this release, I do not see a compelling reason to break source compatibility. We can easily include the changes in the next release, accompanied with a Jira issue to increase the visibility of the updates.
Regards, Matt J On Mon, Jun 20, 2022 at 10:34 AM sebb <[email protected]> wrote: > > On Mon, 20 Jun 2022 at 15:26, Gary Gregory <[email protected]> wrote: > > > > It is OK with me because _binary_ compatibility is what matters most and > > that is maintained. > > > > If you are compiling your code against a new version of a library, then > > changing source files is fair game IMO. > > I agree that binary compatibility is vital; if it is broken, this > means a new major release and a new package/Maven coords. > That is because it is not possible in general to fix the problems that > binary incompatibility can cause without changing package and coords. > > However source incompatibilities should be fixable, but might require > some effort. > As such, they need to mentioned in release notes, and the level of > change needed should be reflected in the version numbering. > e.g. if only a recompile is needed, then a patch version bump would be > sufficient. > Otherwise at least a minor version bump is warranted. > > > Gary > > > > On Sun, Jun 19, 2022, 10:50 Matt Juntunen <[email protected]> wrote: > > > > > Hello, > > > > > > The throw clauses in question are on protected methods. If a user had > > > overridden these and then thrown an exception, they may have to modify > > > their source in order to compile against 2.8. Is this ok from the > > > point of view of our backwards compatibility guarantees? > > > > > > Regards, > > > Matt J > > > > > > On Sun, Jun 19, 2022 at 2:26 AM Gary Gregory <[email protected]> > > > wrote: > > > > > > > > This change is incorrect, binary compatibility was NOT broken as the JLS > > > > specifies that: > > > > > > > > "Changes to the throws clause of methods or constructors do not break > > > > compatibility with pre-existing binaries; these clauses are checked only > > > at > > > > compile time." > > > > > > > > See > > > > > > > https://docs.oracle.com/javase/specs/jls/se8/html/jls-13.html#jls-13.4.21 > > > > > > > > The Maven default goal runs JApiCmp which checks this. > > > > > > > > This free us to clean up our code. > > > > > > > > If a user is actually reconciling sources, then, yes, they may have to > > > > adjust call sites, which ok. Binary compatibility is maintained. > > > > > > > > Gary > > > > > > > > On Sat, Jun 18, 2022, 23:59 <[email protected]> wrote: > > > > > > > > > This is an automated email from the ASF dual-hosted git repository. > > > > > > > > > > mattjuntunen pushed a commit to branch master > > > > > in repository > > > > > https://gitbox.apache.org/repos/asf/commons-configuration.git > > > > > > > > > > > > > > > The following commit(s) were added to refs/heads/master by this push: > > > > > new 2e39ef6b fixing binary incompatibilities with v2.7 > > > > > 2e39ef6b is described below > > > > > > > > > > commit 2e39ef6b3909425db1ccf6c1bb58d76f953b5f9a > > > > > Author: Matt Juntunen <[email protected]> > > > > > AuthorDate: Sat Jun 18 23:59:17 2022 -0400 > > > > > > > > > > fixing binary incompatibilities with v2.7 > > > > > --- > > > > > .../apache/commons/configuration2/YAMLConfiguration.java | 15 > > > > > ++++++++------- > > > > > .../configuration2/builder/ConfigurationBuilderEvent.java | 2 +- > > > > > .../org/apache/commons/configuration2/event/Event.java | 2 +- > > > > > .../commons/configuration2/interpol/ConstantLookup.java | 4 ++-- > > > > > 4 files changed, 12 insertions(+), 11 deletions(-) > > > > > > > > > > diff --git > > > > > > > > a/src/main/java/org/apache/commons/configuration2/YAMLConfiguration.java > > > > > > > > b/src/main/java/org/apache/commons/configuration2/YAMLConfiguration.java > > > > > index 705c2a21..4732e3f3 100644 > > > > > --- > > > > > > > > a/src/main/java/org/apache/commons/configuration2/YAMLConfiguration.java > > > > > +++ > > > > > > > > b/src/main/java/org/apache/commons/configuration2/YAMLConfiguration.java > > > > > @@ -17,6 +17,12 @@ > > > > > > > > > > package org.apache.commons.configuration2; > > > > > > > > > > +import java.io.IOException; > > > > > +import java.io.InputStream; > > > > > +import java.io.Reader; > > > > > +import java.io.Writer; > > > > > +import java.util.Map; > > > > > + > > > > > import org.apache.commons.configuration2.ex.ConfigurationException; > > > > > import > > > org.apache.commons.configuration2.ex.ConfigurationRuntimeException; > > > > > import org.apache.commons.configuration2.io.InputStreamSupport; > > > > > @@ -27,12 +33,6 @@ import org.yaml.snakeyaml.Yaml; > > > > > import org.yaml.snakeyaml.constructor.Constructor; > > > > > import org.yaml.snakeyaml.representer.Representer; > > > > > > > > > > -import java.io.IOException; > > > > > -import java.io.InputStream; > > > > > -import java.io.Reader; > > > > > -import java.io.Writer; > > > > > -import java.util.Map; > > > > > - > > > > > /** > > > > > * <p> > > > > > * A specialized hierarchical configuration class that is able to > > > parse > > > > > YAML documents. > > > > > @@ -84,7 +84,8 @@ public class YAMLConfiguration extends > > > > > AbstractYAMLBasedConfiguration implements > > > > > dump(out, options); > > > > > } > > > > > > > > > > - public void dump(final Writer out, final DumperOptions options) { > > > > > + public void dump(final Writer out, final DumperOptions options) > > > > > + throws ConfigurationException, IOException { > > > > > final Yaml yaml = new Yaml(options); > > > > > > > > > > > > > > > yaml.dump(constructMap(getNodeModel().getNodeHandler().getRootNode()), > > > > > out); > > > > > } > > > > > diff --git > > > > > > > > a/src/main/java/org/apache/commons/configuration2/builder/ConfigurationBuilderEvent.java > > > > > > > > b/src/main/java/org/apache/commons/configuration2/builder/ConfigurationBuilderEvent.java > > > > > index 9f944b44..f4aa7f77 100644 > > > > > --- > > > > > > > > a/src/main/java/org/apache/commons/configuration2/builder/ConfigurationBuilderEvent.java > > > > > +++ > > > > > > > > b/src/main/java/org/apache/commons/configuration2/builder/ConfigurationBuilderEvent.java > > > > > @@ -33,7 +33,7 @@ import > > > org.apache.commons.configuration2.event.EventType; > > > > > */ > > > > > public class ConfigurationBuilderEvent extends Event { > > > > > > > > > > - private static final long serialVersionUID = 1L; > > > > > + private static final long serialVersionUID = > > > -7488811456039315104L; > > > > > > > > > > /** The common super type for all events related to configuration > > > > > builders. */ > > > > > public static final EventType<ConfigurationBuilderEvent> ANY = > > > > > new > > > > > EventType<>(Event.ANY, "BUILDER"); > > > > > diff --git > > > > > a/src/main/java/org/apache/commons/configuration2/event/Event.java > > > > > b/src/main/java/org/apache/commons/configuration2/event/Event.java > > > > > index 11f1bce7..8845c4fe 100644 > > > > > --- a/src/main/java/org/apache/commons/configuration2/event/Event.java > > > > > +++ b/src/main/java/org/apache/commons/configuration2/event/Event.java > > > > > @@ -39,7 +39,7 @@ public class Event extends EventObject { > > > > > */ > > > > > public static final EventType<Event> ANY = new EventType<>(null, > > > > > "ANY"); > > > > > > > > > > - private static final long serialVersionUID = 1L; > > > > > + private static final long serialVersionUID = > > > -8168310049858198944L; > > > > > > > > > > /** > > > > > * Constant for the format used in toString() for a property > > > > > representation. > > > > > diff --git > > > > > > > > a/src/main/java/org/apache/commons/configuration2/interpol/ConstantLookup.java > > > > > > > > b/src/main/java/org/apache/commons/configuration2/interpol/ConstantLookup.java > > > > > index 89ecbe13..7351d289 100644 > > > > > --- > > > > > > > > a/src/main/java/org/apache/commons/configuration2/interpol/ConstantLookup.java > > > > > +++ > > > > > > > > b/src/main/java/org/apache/commons/configuration2/interpol/ConstantLookup.java > > > > > @@ -92,9 +92,9 @@ public class ConstantLookup implements Lookup { > > > > > * @param className the name of the class > > > > > * @param fieldName the name of the member field of that class to > > > read > > > > > * @return the field's value > > > > > - * @throws ReflectiveOperationException if an error occurs > > > > > + * @throws Exception if an error occurs > > > > > */ > > > > > - protected Object resolveField(final String className, final > > > > > String > > > > > fieldName) throws ReflectiveOperationException { > > > > > + protected Object resolveField(final String className, final > > > > > String > > > > > fieldName) throws Exception { > > > > > return fetchClass(className).getField(fieldName).get(null); > > > > > } > > > > > > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > > 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] > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
