gpt4 book ai didi

java - 使用 Spring Boot 作为通用 JAR 和 Gradle 的传递依赖项

转载 作者:行者123 更新时间:2023-12-03 05:02:55 25 4
gpt4 key购买 nike

我有一个公共(public)库,它作为 jar 发布到本地 Maven,然后由一组非常瘦的客户端应用程序使用。这些应用程序基本上将自己的配置提供给公共(public)库并将自己初始化为 Spring 应用程序。
这个通用库使用 spring boot 和一堆其他依赖项。我的问题是,我是否可以 不是 将spring boot定义为应用程序中的依赖项,并简单地将公共(public)库的spring版本用作所有应用程序中的传递依赖项?
我觉得这应该是可能的,但是当我尝试这样做时,springframework.org.boot类没有被解析(例如:@SpringBootApplication 注解)。
这些是我的 build.gradle 文件:
公共(public)库中的 build.gradle

plugins {
id 'java-library'
id 'maven-publish'
}

group 'com.my.group'
version '1.0-SNAPSHOT'

sourceCompatibility = '11'

repositories {
mavenLocal()
}

publishing {
publications {
mavenJava(MavenPublication) {
groupId = 'com.my.group'
artifactId = 'common-lib'
version = '0-alpha.1'

from components.java
}
}
}

configurations {
springBom
compileOnly.extendsFrom(springBom)
annotationProcessor.extendsFrom(springBom)
implementation.extendsFrom(springBom)
}

dependencies {
springBom enforcedPlatform('org.springframework.boot:spring-boot-dependencies:2.3.5.RELEASE')

api 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.cloud:spring-cloud-aws-messaging'

annotationProcessor 'org.springframework.boot:spring-boot-autoconfigure-processor'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'

// a few other non-spring dependencies
}
来自示例应用程序的 build.gradle
plugins {
id 'java'
}

group = 'com.my.group'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
mavenLocal()
}

dependencies {
implementation group: 'com.my.group', name: 'common-lib', version: '0-alpha.1'
}
示例应用程序初始化
package com.my.group.Core;
// none of the below are resolved
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;

@SpringBootApplication(scanBasePackages = {"com.my.group"})
public class ConsumerApplication implements ApplicationRunner {

@Autowired
Core core;

public ConsumerApplication() {
}

public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}

@Override
public void run(ApplicationArguments args) {
try {
core.processEvents();
} catch (ConfigurationException | InitializationException e) {
e.printStackTrace();
}
}
}
如果我将以下依赖项添加到我的应用程序中,一切都会按预期工作。
springBom enforcedPlatform('org.springframework.boot:spring-boot-dependencies:2.3.5.RELEASE')
implementation 'org.springframework.boot:spring-boot-starter'

最佳答案

我发现了这个问题。我没有包含api在配置中,因此应用程序无法解析版本。通过更新我的公共(public)库中的 build.gradle 来修复,如下所示:

configurations {
springBom
compileOnly.extendsFrom(springBom)
annotationProcessor.extendsFrom(springBom)
implementation.extendsFrom(springBom)
api.extendsFrom(springBom)
}

关于java - 使用 Spring Boot 作为通用 JAR 和 Gradle 的传递依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64635819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com