¿Puedo forzar a una dependencia maven A a usar una versión específica de una dependencia B, mientras uso una versión diferente de la dependencia B junto con ella?

Tengo dos proyectos maven, vamos a llamarlos mastery aux. Masterdepende de aux, y también de una versión específica de org.apache.httpcomponents.httpclient. Auxdepende de una versión posterior de org.apache.httpcomponents.httpclient.

p.ej

<project...>
  <artifactId>master</artifactId>
  <groupId>com.my-company</groupId>

  <dependencies>

    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>earlier version</version>
    </dependency>

    <!--<uses later version of http client>-->
    <dependency>
      <groupId>com.my-company</groupId>
      <artifactId>aux</artifactId>
    </dependency>

    ...
  </dependencies>
  ...
</project>

Sin embargo, auxdepende de las clases que solo se encuentran en la versión más reciente de httpclient, y masterlas dependencias de httpclientno son compatibles con el reenvío, por lo que, independientemente de la versión que excluya, las llamadas REST fallarán en los lugares esperados.

¿Hay alguna forma de requerir el auxuso de la dependencia más nueva y masterla más antigua?

Sé que puedo reconciliarme auxy masterparchearlos para poder usar la misma dependencia, pero esto estaría lejos de ser ideal.

Respuesta 1

No puede tener varias versiones de la misma biblioteca / clases en el classpath al mismo tiempo. Tendría que separar 'master' y 'aux' en jarras separadas, incrustar la versión necesaria httpclienty cargar cada jarra con su propio cargador de clases.

Hay un marco llamado OSGi que hace exactamente esto. Podría ser excesivo para su aplicación, pero si desea comenzar, puede echar un vistazo a OSGi enRoute .

Respuesta: 2

Soy nuevo en Android Studio y estoy pasando por intentos. Estoy creando una aplicación de registro que toma información del usuario en las primeras 4 actividades y las muestra por completo en las vistas respectivas el quinto ...

Estoy estudiando para la prueba de introducción a la ciencia de la mañana y necesito poder determinar el valor de las diferentes operaciones. Con mis cálculos, t debería ser igual a 8. Pero al compilarlo devuelve 11. ¿Por qué ...

El Javadoc para ConcurrentSkipListMap.compute (K, BiFunction) establece: Intenta calcular una asignación para la clave especificada y su valor asignado actual (o nulo si no hay ninguna asignación actual). Los ...

¿Hay una estructura de datos en Java que debería usar para esta situación? Actualmente, tengo una clase de línea plana de 12000 con una gran cantidad de funciones. Cada función simplemente devuelve una cadena. público ...