程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何允许 Spring Boot 应用程序使用具有 Spring Cloud 依赖项的自定义 jar大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何允许 Spring Boot 应用程序使用具有 Spring Cloud 依赖项的自定义 jar?

开发过程中遇到如何允许 Spring Boot 应用程序使用具有 Spring Cloud 依赖项的自定义 jar的问题如何解决?下面主要结合日常开发的经验,给出你关于如何允许 Spring Boot 应用程序使用具有 Spring Cloud 依赖项的自定义 jar的解决方法建议,希望对你解决如何允许 Spring Boot 应用程序使用具有 Spring Cloud 依赖项的自定义 jar有所启发或帮助;

我有许多 Spring Boot 微服务,并且我开发了一个新项目,该项目具有 Spring-Vault 作为依赖项。开发这个新项目(比如 vault-clIEnt-spring)是为了具有用于设置 Vault 的通用配置并在所有微服务中使用它,我已将 jar 发布到我组织的私有 Maven 托管存储库中。

我的问题是当我在任何微服务中添加这个 jar 作为依赖项时,应用程序没有开始抛出以下错误。 Spring-Cloud-Vault 依赖项不会导入到我的消费项目中。我还在 spring.cloud.vault 文件中添加了以前缀 bootstrap.yml 开头的必要属性。

这是我的 build.gradle 文件 vault-clIEnt-spring

group = 'com.mygroup'
version = '0.0.1'

buildscript {
    ext {
        springBootVersion = '2.4.4'
        springDepsMgmtVersion = '1.0.11.RELEASE'
    }

    repositorIEs {
        mavenCentral()
    }

    dependencIEs {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
        classpath "io.spring.gradle:dependency-management-plugin:${springDepsMgmtVersion}"
    }
}

apply plugin: 'java-library'
apply plugin: 'IDea'
apply plugin: 'maven-publish'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

sourceCompatibility = '1.8'

repositorIEs {
    mavenCentral()
}

configurations {
    compiLeonly {
        extendsFrom AnnotationProcessor
    }
}

bootJar {
    enabled = false
}

jar {
    archivesBasename = 'vault-clIEnt-spring'
    enabled = true
}

ext {
    springCloudVersion = '2020.0.2'
}

dependencymanagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencIEs:${springCloudVersion}"
    }
}

dependencIEs {
    implementation 'org.springframework.cloud:spring-cloud-starter-vault-config'
    compiLeonly 'org.projectlombok:lombok'
    AnnotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
    useJUnitPlatform()
}

task sourcesJar(type: Jar,dependsOn: classes) {
    classifIEr('sources')
    from sourceSets.main.allsource
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            artifact jar
            artifact sourcesJar
        }
    }
    repositorIEs {
        maven {
            credentials {
                username 'PRIVATE-USER'
                password 'PRIVATE-passworD'
            }
            url 'PRIVATE MAVEN URL'
        }
    }
}

这是使用此 jar 的微服务的 build.gradle 文件。

plugins {
    ID 'org.springframework.boot' version '2.4.3'
    ID 'io.spring.dependency-management' version '1.0.11.RELEASE'
    ID 'java'
}

group = 'com.mygroup'
version = ''
sourceCompatibility = '1.8'

configurations {
    compiLeonly {
        extendsFrom AnnotationProcessor
    }
}

repositorIEs {
    mavenCentral()
    maven { url 'PRIVATE MAVEN URL' }
}

bootJar {
    setArchivesBasename("microservice-one")
    version("")
}

dependencIEs {
    implementation 'com.mygroup:vault-clIEnt-spring:0.0.1' // here's the dependency
    implementation 'org.springframework.boot:spring-boot-starter-web'

    compiLeonly 'org.projectlombok:lombok'
    AnnotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

compileJava {
    compileJava.inputs.files(processresources)
}

test {
    useJUnitPlatform()
}

生成的 POM 文件。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLscheR_516_11845@a-instance" xsi:scheR_516_11845@aLOCATIOn="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupID>com.mygroup</groupID>
    <artifactID>vault-clIEnt-spring</artifactID>
    <version>0.0.1</version>
    <dependencymanagement>
        <dependencIEs>
            <dependency>
                <groupID>org.springframework.cloud</groupID>
                <artifactID>spring-cloud-dependencIEs</artifactID>
                <version>2020.0.2</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
            <dependency>
                <groupID>org.springframework.boot</groupID>
                <artifactID>spring-boot-dependencIEs</artifactID>
                <version>2.4.4</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencIEs>
    </dependencymanagement>
</project>

我面临的错误如下..

Caused by: java.io.fileNotFoundException: class path resource [org/springframework/vault/config/AbstractVaultConfiguration.class] cAnnot be opened because it does not exist
    at org.springframework.core.io.ClassPathresource.geTinputStream(ClassPathresource.java:180) ~[spring-core-5.3.4.jar:5.3.4]
    at org.springframework.core.type.classreading.SimpleMetadataReader.getClassReader(SimpleMetadataReader.java:55) ~[spring-core-5.3.4.jar:5.3.4]
    at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:49) ~[spring-core-5.3.4.jar:5.3.4]
    at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:103) ~[spring-core-5.3.4.jar:5.3.4]
    at org.springframework.boot.type.classreading.ConcurrentReferenceCachingMetadataReaderFactory.createMetadataReader(ConcurrentReferenceCachingMetadataReaderFactory.java:86) ~[spring-boot-2.4.3.jar:2.4.3]
    at org.springframework.boot.type.classreading.ConcurrentReferenceCachingMetadataReaderFactory.getMetadataReader(ConcurrentReferenceCachingMetadataReaderFactory.java:73) ~[spring-boot-2.4.3.jar:2.4.3]
    at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:81) ~[spring-core-5.3.4.jar:5.3.4]
    at org.springframework.context.Annotation.ConfigurationClassparser.assourceClass(ConfigurationClassparser.java:696) ~[spring-context-5.3.4.jar:5.3.4]
    at org.springframework.context.Annotation.ConfigurationClassparser$sourceClass.getSuperClass(ConfigurationClassparser.java:1010) ~[spring-context-5.3.4.jar:5.3.4]
    at org.springframework.context.Annotation.ConfigurationClassparser.doprocessConfigurationClass(ConfigurationClassparser.java:341) ~[spring-context-5.3.4.jar:5.3.4]
    at org.springframework.context.Annotation.ConfigurationClassparser.processConfigurationClass(ConfigurationClassparser.java:250) ~[spring-context-5.3.4.jar:5.3.4]
    at org.springframework.context.Annotation.ConfigurationClassparser.parse(ConfigurationClassparser.java:199) ~[spring-context-5.3.4.jar:5.3.4]
    at org.springframework.context.Annotation.ConfigurationClassparser.doprocessConfigurationClass(ConfigurationClassparser.java:304) ~[spring-context-5.3.4.jar:5.3.4]
    at org.springframework.context.Annotation.ConfigurationClassparser.processConfigurationClass(ConfigurationClassparser.java:250) ~[spring-context-5.3.4.jar:5.3.4]
    at org.springframework.context.Annotation.ConfigurationClassparser.parse(ConfigurationClassparser.java:207) ~[spring-context-5.3.4.jar:5.3.4]
    at org.springframework.context.Annotation.ConfigurationClassparser.parse(ConfigurationClassparser.java:175) ~[spring-context-5.3.4.jar:5.3.4]
    ... 14 common frames omitted

如何解决这个错误?第一次做Spring Cloud原生项目

解决方法

我自己找到的。由于我正在作为“库”进行开发,因此我必须允许 Spring-Vault 依赖项包含在使用应用程序中。根据 Gradle 的 java-library 插件,我使用了 api 依赖项。消费应用程序可以访问和引导它们。

大佬总结

以上是大佬教程为你收集整理的如何允许 Spring Boot 应用程序使用具有 Spring Cloud 依赖项的自定义 jar全部内容,希望文章能够帮你解决如何允许 Spring Boot 应用程序使用具有 Spring Cloud 依赖项的自定义 jar所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。