微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在多项目 gradle springoboot 应用程序中获取类路径中的库 jar?

如何解决如何在多项目 gradle springoboot 应用程序中获取类路径中的库 jar?

我正在使用 IntelliJ 开发一个多项目 gradle springboot 应用程序。我将 Gradle 用于依赖项和 jars 包含。

主模块 (springboot) 包括另外两个,其中一个使用外部库,我们无法控制它必须位于我的目录中。此外部库包含位于特定文件夹中的自己的设置。

当我创建主 jar(我想执行的那个)时,它包含所有依赖的 jar,两个模块 jar 加上外部库 jar。

首先,我尝试在需要库的模块的 resources/meta-inf/MANIFEST.MF 上添加类路径,但是当我的 intelliJ 创建 Jar 时,资源被删除。 因此,因为该库使用位于 jar 后面 2 个目录的 /configs 目录中的设置。在找到库 jar 之前,我还尝试在主 jar 2 目录中添加 /config 目录和我的配置,但它不能正常工作。程序无法定位其配置。

另一方面,我尝试从主 jar 中删除库 jar 并使用以下命令运行主 jar:

Java –cp (library directory) –jar (main jar)

还有

java -cp myJar.jar;/lib/xxx -Dloader.main=myMainApplicationClass org.springframework.boot.loader.PropertiesLauncher

[xxx 代表找到库jar前多一个目录]

查看消息 Spring Boot Executable Jar with Classpath)

但我收到一个 ClassNotFoundException 错误,因此使用该库的模块找不到它。 如何添加库 jars 和一个模块所需的设置?所以当我运行主 jar 时,它会正确加载它们。

最后,我必须补充一点,如果我从 IntelliJ 运行该应用程序,该程序将正常运行。问题是当我想使用主 jar 从命令行运行应用程序时。

谢谢!

示例:

Example from what I have and what I want (Structure)

配置目录必须来自外部库 .JAR

来自模块 A 的 build.gradle:

plugins {
    id 'java'
}

group 'MYCOMPANY.GROUP'
version '0.0.1-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
    implementation group: 'org.projectlombok',name: 'lombok',version: '1.18.20'
    annotationProcessor 'org.projectlombok:lombok:1.18.20'

    implementation files('MODULE B.JAR')
    implementation files('EXTERNAL LIBRARY .JAR')
    
    
    implementation group: 'com.android.tools.build',name: 'gradle',version: '2.3.0'
    //Includes 
    implementation group: 'javax.mail',name: 'mail',version: '1.4.7'
    implementation 'org.apache.poi:poi:5.0.0'
    implementation 'org.apache.poi:poi-ooxml:5.0.0'
    //Includes from utils
    implementation group: 'net.sourceforge.jexcelapi',name: 'jxl',version: '2.6.12'
    implementation group: 'com.amazonaws',name: 'aws-java-sdk-s3',version: '1.12.39'


}

test {
    useJUnitPlatform()
}

来自模块B的build.gradle:

group 'MYCOMPANY.GROUP'
version '0.0.1-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'

    implementation group: 'com.fasterxml.jackson.core',name: 'jackson-annotations',version: '2.12.3'
    implementation group: 'com.fasterxml.jackson.core',name: 'jackson-core',name: 'jackson-databind',version: '2.12.3'
}

test {
    useJUnitPlatform()
}

从主构建.gradle

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

group = 'MYCOMPANY.GROUP'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {

    implementation files('MODULE A.JAR')
    implementation files('MODULE B.JAR')

    //This includes the external library into main.JAR 
    //Allows to external library find the configs directory into JAR resources 
    implementation files('EXTERNAL LIBRARY .JAR')  

    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-web-services'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    implementation 'org.aspectj:aspectjweaver:1.9.2'

    implementation 'org.apache.poi:poi:5.0.0'
    implementation 'org.apache.poi:poi-ooxml:5.0.0'

    implementation group: 'com.google.guava',name: 'guava',version: '30.1.1-jre'

    implementation group: 'org.seleniumhq.selenium',name: 'selenium-chrome-driver',version: '3.141.59'

    implementation 'org.json:json:20210307'

    implementation group: 'com.android.tools.build',version: '2.3.0'


}

test {
    useJUnitPlatform()
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。