tengo tres módulos en mi proyecto Maven (esto es ligeramente simplificado):¿Por qué una dependencia con alcance "provisto" oculta dependencias transitivas en Maven?
- modelo contiene APP anotado clases de entidad
- persistencia instancia un EntityManager y llama a los métodos en él
- aplicación crea instancias de las clases en modelo, establece algunos valores y los pasa a persistencia
modelo y persistencia dependen obviamente en javax.persistence
, pero de aplicación no debe, creo.
La dependencia javax.persistence
se mueve a la sección dependencyManagement
de un POM de nivel superior porque se produce en una serie de submódulos en los que solo hago referencia a esa entrada.
Lo que me sorprende es que tengo que hacer referencia a la dependencia en application
cuando establezco su alcance en provided
, mientras que no es necesario cuando su alcance es compile
.
Con un alcance de provided
, si no incluirla en la dependencies
para la aplicación , la generación falla con un mensaje de error de javac:
com.sun.tools.javac.code .Symbol $ CompletionFailure: archivo de clase para javax.persistence.InheritanceType no encontrado
¿Qué está pasando?
Lo sentimos pero este título es engañoso. No hay nada de malo en el alcance 'provisto' y las dependencias transitivas, no rompe nada. –
@Pascal - No, no hay nada * incorrecto * con él, pero usar 'provided' hace que" se rompa "(o más bien, se apague) la resolución transitiva, como han señalado usted y james correctamente. –
@Hanno No, no es así. El alcance afecta las dependencias transitivas pero no las rompe. –