У меня есть три модуля в моем проекте Maven (это немного упрощено):
- содержит классы аннотированных сущностей JPA
- persistence создает экземпляр EntityManager и вызывает на нем методы
- приложение создает экземпляры классов в модели, устанавливает некоторые значения и передает их настойчивость
модель и постоянство, очевидно, зависят от javax.persistence, но приложение не должно, я думаю.
Зависимость javax.persistence перемещается в раздел POM dependencyManagement верхнего уровня, поскольку он встречается в ряде подмодулей, где я ссылаюсь только на эту запись.
Что удивительно для меня, так это то, что я должен ссылаться на зависимость в application, когда я устанавливаю свою область в provided, тогда как мне не нужно, когда ее область видимости compile.
В области provided, если я не перечисляю его в приложении dependencies для приложения, сборка завершается с сообщением об ошибке из javac:
com.sun.tools.javac.code.Symbol $CompletionFailure: файл класса для javax.persistence.InheritanceType не найден
Что происходит?