Я хочу создать проект библиотеки Spring, чтобы поделиться им с внутренней командой.
На базовом уровне концепции Библиотека будет отправлять события сообщений в очередь, и я планирую стандартизировать это в рамках группы по нескольким Spring Boot Microservices, отправляющих сообщения таким же образом.
Мой pom в проекте библиотеки выглядит примерно так
<artifactId>my-library</artifactId>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
etc...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.16.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.2.Final</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.el</artifactId>
<version>2.2.6</version>
</dependency>
У меня есть сервис в проекте библиотеки, который выглядит так
public class EventService {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
public void sendAuditEvent(AuditMessage auditMessage){
Set<ConstraintViolation<AuditMessage>> violations = validator.validate(auditMessage);
if(!isEmpty(violations)){
log.error("Unable to send audit message");
violations.stream().forEach( v-> log.error(v.getMessage()));
}
log.info("Found {} violations", violations.size());
// etc blah blah
return;
}
}
Когда я импортирую библиотеку в другой проект, я думаю, что могу автоматически связать EventService. Добавив его в пом, а затем
@ComponentScan({"my.library.package.eventlibrary.service"})
Как предотвратить блокировку пружинной версии? Если библиотека сегодня использует spring 2.1.5.RELEASE
, а проект, который импортирует библиотеку, использует другую версию, разве я не столкнусь с потенциально опасными конфликтами?
Также допустим, что проект, который импортирует библиотеку, использует более низкую версию hibernate api, а библиотека имеет 6.0.16.Final
. Как бы я не позволил проекту использовать более новый, найденный в пути к классам библиотеки?
Чтобы прояснить мой вопрос, есть ли способ отделить зависимости в библиотеке от проекта, который ее использует.