Библиотека
build.gradle
Код: Выделить всё
plugins {
id 'java-library'
id 'org.springframework.boot' version '3.3.2'
id 'io.spring.dependency-management' version '1.1.6'
id 'maven-publish'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
withSourcesJar()
}
repositories {
mavenCentral()
}
bootJar {
enabled = true
}
jar {
enabled = true
archiveClassifier = ''
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
}
Код: Выделить всё
@Service
public class MyRestService {
private final RestTemplate restTemplate;
public MyRestService(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
public String getRandom() {
return restTemplate.getForObject("https://httpbin.org/uuid", String.class);
}
}
Код: Выделить всё
@Configuration
public class LibraryConfig {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
// a lot of customizations here. left for brevity
return builder.build();
}
}
Клиент должен просто получить зависимость
Код: Выделить всё
plugins {
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
implementation 'com.example:library:0.0.1-SNAPSHOT'
}
Код: Выделить всё
package com.example.demo.client;
import com.example.demo.library.service.MyRestService;
public class ClientApplication {
public static void main(String[] args) {
final MyRestService myRestService = new MyRestService(); // error: dependency RestTemplate is not available here
System.out.println(myRestService.getRandom());
}
}
- Клиент должен добавить Spring в качестве зависимости вручную
< li>У клиента нет управляемого библиотекой RestTemplate, доступного для аргумента конструктора MyRestService в ClientApplication.
- Должен ли клиент тогда иметь дело с Spring и запускать Spring-контейнер?
- Можно ли сделать это прозрачным в библиотеке или как это делается обычно решается?
- Я на неправильном пути и нужно ли говорить клиенту, что он может использовать его только с приложениями Spring?
Подробнее здесь: https://stackoverflow.com/questions/787 ... -a-library
Мобильная версия