Весна для библиотекиJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Весна для библиотеки

Сообщение Anonymous »

Я написал библиотеку для предоставления Java API для службы Rest, которая сильно зависит от весенней/весенней загрузки, например RestTemplate, RestTemplateRequestCustomizer, ResponseErrorHandler и т. д. Теперь я хочу распространить библиотеку в виде jar, чтобы ее можно было использовать в любое приложение Java (также не использующее Spring) с maven или gradle, используя jar из репозитория maven.
Библиотека
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»