У меня есть три модуля в моем проекте 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 не найден
Что происходит?