Hi Marshall, I am just playing around with a compatibility-checking Maven plugin and tried applying it to uimaj-core. Even after excluding all "internal" and "impl" stuff, there still appear to be changes that may make builds from 2.7.x not backwards-compatible with an installation using 2.6.0.
Unfortunately, the tool output is not filtered with respect to what really are compatible changes and what are not. But I think the culprits here are: Class org.apache.uima.UIMARuntimeException Removed Field ILLEGAL_CAS_COPY_TO_SAME_CAS_SAME_VIEW, desc Ljava/lang/String;, access final public static Class org.apache.uima.util.CasCopier Removed Method alreadyCopied, desc (Lorg/apache/uima/cas/FeatureStructure;)Z, access public Full details below. Btw. according to the same plugin's interpretation of semantic versioning (http://semver.org), trunk should be 2.8.0. Apparently any change in the public API should trigger a minor version increment. Cheers, -- Richard --- [INFO] --- maven-enforcer-plugin:1.3.1:enforce (enforce-compatibility) @ uimaj-core --- [INFO] Version specified as <2.6.0> [INFO] Using </Users/bluefire/.m2/repository/org/apache/uima/uimaj-core/2.6.0/uimaj-core-2.6.0.jar> as previous JAR [INFO] Using </Users/bluefire/UKP/Workspaces/maintenance/uimaj/uimaj-core/target/uima-core.jar> as current JAR Class org.apache.uima.UIMARuntimeException Added Field ILLEGAL_FS_FEAT_UPDATE, desc Ljava/lang/String;, access final public static Removed Field ILLEGAL_CAS_COPY_TO_SAME_CAS_SAME_VIEW, desc Ljava/lang/String;, access final public static Added Field COPY_CAS_RANGE_TYPE_NAMES_NOT_EQUAL, desc Ljava/lang/String;, access final public static Class org.apache.uima.cas.CAS Added Method protectIndexes, desc ()Ljava/lang/AutoCloseable;, access abstract public Added Method protectIndexes, desc (Ljava/lang/Runnable;)V, access abstract public Class org.apache.uima.cas.CASRuntimeException Added Field ILLEGAL_FEAT_SET, desc Ljava/lang/String;, access final public static Class org.apache.uima.cas.FSIndex Added Method withSnapshotIterators, sig ()Lorg/apache/uima/cas/FSIndex<TT;>;, desc ()Lorg/apache/uima/cas/FSIndex;, access abstract public Class org.apache.uima.cas.FSIndexRepository Added Method ll_getIndexes, sig ()Ljava/util/Iterator<Lorg/apache/uima/cas/impl/LowLevelIndex;>;, desc ()Ljava/util/Iterator;, access abstract public Class org.apache.uima.jcas.JCas Added Method getAllIndexedFS, sig <T:Lorg/apache/uima/jcas/cas/TOP;>(Ljava/lang/Class<TT;>;)Lorg/apache/uima/cas/FSIterator<TT;>;, desc (Ljava/lang/Class;)Lorg/apache/uima/cas/FSIterator;, access abstract public Added Method getAnnotationIndex, sig <T:Lorg/apache/uima/jcas/tcas/Annotation;>(Ljava/lang/Class<TT;>;)Lorg/apache/uima/cas/text/AnnotationIndex<TT;>;, desc (Ljava/lang/Class;)Lorg/apache/uima/cas/text/AnnotationIndex;, access abstract public Added Method protectIndexes, desc ()Ljava/lang/AutoCloseable;, access abstract public Added Method getIndex, sig <T:Lorg/apache/uima/jcas/cas/TOP;>(Ljava/lang/String;Ljava/lang/Class<TT;>;)Lorg/apache/uima/cas/FSIndex<TT;>;, desc (Ljava/lang/String;Ljava/lang/Class;)Lorg/apache/uima/cas/FSIndex;, access abstract public Added Method protectIndexes, desc (Ljava/lang/Runnable;)V, access abstract public Class org.apache.uima.util.CasCopier Removed Method alreadyCopied, desc (Lorg/apache/uima/cas/FeatureStructure;)Z, access public Added Method alreadyCopied, desc (I)Z, access public Class org.apache.uima.util.MessageReport Added Class , access public super synchronized Class org.apache.uima.util.Misc Added Class , access public super synchronized [WARNING] Rule 0: org.semver.enforcer.RequireBackwardCompatibility failed with message: Current codebase is not backward compatible (BACKWARD_COMPATIBLE_IMPLEMENTER) with version <2.6.0>. Compatibility type has been detected as <NON_BACKWARD_COMPATIBLE> --- To play around yourself, add this to the uimaj-parent pom --- // in properties <!-- BACKWARD_COMPATIBLE_IMPLEMENTER - patch version (=.=.+) BACKWARD_COMPATIBLE_USER - minor version (=.+.0) NON_BACKWARD_COMPATIBLE - major version (+.0.0) --> <compat.level>BACKWARD_COMPATIBLE_IMPLEMENTER</compat.level> <compat.previous.version>2.6.0</compat.previous.version> // in enforcer <execution> <id>enforce-compatibility</id> <phase>verify</phase> <goals> <goal>enforce</goal> </goals> <configuration> <rules> <requireBackwardCompatibility implementation="org.semver.enforcer.RequireBackwardCompatibility"> <previousVersion>${compat.previous.version}</previousVersion> <dumpDetails>true</dumpDetails> <compatibilityType>${compat.level}</compatibilityType> <excludes> <exclude>**/impl/**/*</exclude> <exclude>**/internal/**/*</exclude> </excludes> </requireBackwardCompatibility> </rules> </configuration> </execution> ---
