def resolve_version_conflict(self, managed_coord, direct_coord, force=False):
    """Resolves an artifact version conflict between directly specified and managed jars.

    This uses the user-defined --conflict-strategy to pick the appropriate artifact version (or to
    raise an error).

    This assumes the two conflict coordinates differ only by their version.

    :param M2Coordinate managed_coord: the artifact coordinate as defined by a
      managed_jar_dependencies object.
    :param M2Coordinate direct_coord: the artifact coordinate as defined by a jar_library target.
    :param bool force: Whether the artifact defined by the jar_library() was marked with force=True.
      This is checked only if one of the *_IF_FORCED conflict strategies is being used.
    :return: the coordinate of the artifact that should be resolved.
    :rtype: M2Coordinate
    :raises: JarDependencyManagement.DirectManagedVersionConflict if the versions are different and
      the --conflict-strategy is 'FAIL' (which is the default).
    """
    if M2Coordinate.unversioned(managed_coord) != M2Coordinate.unversioned(direct_coord):
      raise ValueError('Illegal arguments passed to resolve_version_conflict: managed_coord and '
                       'direct_coord must only differ by their version!\n'
                       '  Managed: {}\n  Direct:  {}\n'.format(
        M2Coordinate.unversioned(managed_coord),
        M2Coordinate.unversioned(direct_coord),
      ))

    if direct_coord.rev is None or direct_coord.rev == managed_coord.rev:
      return managed_coord

    strategy = self.get_options().conflict_strategy
    message = dedent("""
      An artifact directly specified by a jar_library target has a different version than what
      is specified by managed_jar_dependencies.

        Artifact: jar(org={org}, name={name}, classifier={classifier}, ext={ext})
        Direct version:  {direct}
        Managed version: {managed}
    """).format(
      org=direct_coord.org,
      name=direct_coord.name,
      classifier=direct_coord.classifier,
      ext=direct_coord.ext,
      direct=direct_coord.rev,
      managed=managed_coord.rev,
    )

    if strategy == 'FAIL':
      raise self.DirectManagedVersionConflict(
        '{}\nThis raises an error due to the current --jar-dependency-management-conflict-strategy.'
        .format(message)
      )

    is_silent = self.get_options().suppress_conflict_warnings
    log = logger.debug if is_silent else logger.warn

    if strategy == 'USE_DIRECT':
      log(message)
      log('[{}] Using direct version: {}'.format(strategy, direct_coord))
      return direct_coord

    if strategy == 'USE_DIRECT_IF_FORCED':
      log(message)
      if force:
        log('[{}] Using direct version, because force=True: {}'.format(strategy, direct_coord))
        return direct_coord
      else:
        log('[{}] Using managed version, because force=False: {}'.format(strategy, managed_coord))
        return managed_coord

    if strategy == 'USE_MANAGED':
      log(message)
      log('[{}] Using managed version: {}'.format(strategy, managed_coord))
      return managed_coord

    if strategy == 'USE_NEWER':
      newer = max([managed_coord, direct_coord],
                  key=lambda coord: Revision.lenient(coord.rev))
      log(message)
      log('[{}] Using newer version: {}'.format(strategy, newer))
      return newer

    raise TaskError('Unknown value for --conflict-strategy: {}'.format(strategy))
def resolve_version_conflict ( self , managed_coord , direct_coord , force = False ) : if M2Coordinate . unversioned ( managed_coord ) != M2Coordinate . unversioned ( direct_coord ) : raise ValueError ( 'Illegal arguments passed to resolve_version_conflict: managed_coord and ' 'direct_coord must only differ by their version!\n' '  Managed: {}\n  Direct:  {}\n' . format ( M2Coordinate . unversioned ( managed_coord ) , M2Coordinate . unversioned ( direct_coord ) , ) ) if direct_coord . rev is None or direct_coord . rev == managed_coord . rev : return managed_coord strategy = self . get_options ( ) . conflict_strategy message = dedent ( """
      An artifact directly specified by a jar_library target has a different version than what
      is specified by managed_jar_dependencies.
        Artifact: jar(org={org}, name={name}, classifier={classifier}, ext={ext})
        Direct version:  {direct}
        Managed version: {managed}
    """ ) . format ( org = direct_coord . org , name = direct_coord . name , classifier = direct_coord . classifier , ext = direct_coord . ext , direct = direct_coord . rev , managed = managed_coord . rev , ) if strategy == 'FAIL' : raise self . DirectManagedVersionConflict ( '{}\nThis raises an error due to the current --jar-dependency-management-conflict-strategy.' . format ( message ) ) is_silent = self . get_options ( ) . suppress_conflict_warnings log = logger . debug if is_silent else logger . warn if strategy == 'USE_DIRECT' : log ( message ) log ( '[{}] Using direct version: {}' . format ( strategy , direct_coord ) ) return direct_coord if strategy == 'USE_DIRECT_IF_FORCED' : log ( message ) if force : log ( '[{}] Using direct version, because force=True: {}' . format ( strategy , direct_coord ) ) return direct_coord else : log ( '[{}] Using managed version, because force=False: {}' . format ( strategy , managed_coord ) ) return managed_coord if strategy == 'USE_MANAGED' : log ( message ) log ( '[{}] Using managed version: {}' . format ( strategy , managed_coord ) ) return managed_coord if strategy == 'USE_NEWER' : newer = max ( [ managed_coord , direct_coord ] , key = lambda coord : Revision . lenient ( coord . rev ) ) log ( message ) log ( '[{}] Using newer version: {}' . format ( strategy , newer ) ) return newer raise TaskError ( 'Unknown value for --conflict-strategy: {}' . format ( strategy ) )
Resolves an artifact version conflict between directly specified and managed jars.

    This uses the user-defined --conflict-strategy to pick the appropriate artifact version (or to
    raise an error).

    This assumes the two conflict coordinates differ only by their version.

    :param M2Coordinate managed_coord: the artifact coordinate as defined by a
      managed_jar_dependencies object.
    :param M2Coordinate direct_coord: the artifact coordinate as defined by a jar_library target.
    :param bool force: Whether the artifact defined by the jar_library() was marked with force=True.
      This is checked only if one of the *_IF_FORCED conflict strategies is being used.
    :return: the coordinate of the artifact that should be resolved.
    :rtype: M2Coordinate
    :raises: JarDependencyManagement.DirectManagedVersionConflict if the versions are different and
      the --conflict-strategy is 'FAIL' (which is the default).