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>
---

Reply via email to