实现应用程序提供哪些依赖项的Java库

实现应用程序提供哪些依赖项的Java库,java,gradle,dynamic,jar,linker,Java,Gradle,Dynamic,Jar,Linker,我正在处理Gradle和两个独立的项目,其中一个项目是一个库,我想编译成一个可实现的jar,它可以在其他项目(应用程序)中使用,也可以在其他项目中使用 在我的库中,我依赖于Java引导和一些Google库。我需要在我的库的Gradle文件中指定什么,在编译时,Java引导和其他库不会编译到jar中,从而扩大其大小 实现我的库jar的应用程序应该提供这些库。在这种情况下,我是否需要在我的应用程序的Gradle文件中指定任何特定内容 您可以将库项目的依赖项定义为编译的 dependencies {

我正在处理Gradle和两个独立的项目,其中一个项目是一个库,我想编译成一个可实现的jar,它可以在其他项目(应用程序)中使用,也可以在其他项目中使用

在我的库中,我依赖于Java引导和一些Google库。我需要在我的库的Gradle文件中指定什么,在编译时,Java引导和其他库不会编译到jar中,从而扩大其大小


实现我的库jar的应用程序应该提供这些库。在这种情况下,我是否需要在我的应用程序的Gradle文件中指定任何特定内容

您可以将库项目的依赖项定义为编译的

dependencies {
  compileOnly group: 'com.google.guava', name: 'guava', version: '27.0-jre'
}
这样,您的依赖项就不会被导出,也不会被打包到任何工件中


如果在测试中需要此依赖项,则还需要将其添加到
testImplementation
配置中。

您可以将库项目的依赖项定义为
compileOnly

dependencies {
  compileOnly group: 'com.google.guava', name: 'guava', version: '27.0-jre'
}
这样,您的依赖项就不会被导出,也不会被打包到任何工件中


如果您在测试中需要此依赖项,您还需要将其添加到
测试实施
配置中。

从问题的这一部分:

[…]Java引导和其他库并没有编译到jar中,从而扩大了jar的大小

我知道您已经将Springboot插件应用到了您的库中(默认情况下,它会生成一个包含所有依赖项的胖jar),而您只想创建一个简单/普通java库

如果我的假设是正确的,最简单的解决方案是仅将Springboot插件用于依赖项管理,而不实际将其应用到项目中,如前所述

您还应该应用,以受益于API/实现分离特性

库项目的样例生成脚本:

plugins {
    id "java-library"
    id "org.springframework.boot" version "2.1.4.RELEASE"  apply false // do not apply it
}
apply plugin: "io.spring.dependency-management"

dependencies {
    // Spring Boot deps 
    implementation "org.springframework.boot:spring-boot-starter-web"

    // libraries you want to "propagate to consumers
    // api group: 'com.google.guava', name: 'guava', version: '23.0'

    // libraries you don"t want to flow in consumers projects
    // implementation ....

    // Test deps
    testImplementation "org.springframework.boot:spring-boot-starter-test"
}
dependencyManagement {
    imports {
        mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
    }
}

从你问题的这一部分:

[…]Java引导和其他库并没有编译到jar中,从而扩大了jar的大小

我知道您已经将Springboot插件应用到了您的库中(默认情况下,它会生成一个包含所有依赖项的胖jar),而您只想创建一个简单/普通java库

如果我的假设是正确的,最简单的解决方案是仅将Springboot插件用于依赖项管理,而不实际将其应用到项目中,如前所述

您还应该应用,以受益于API/实现分离特性

库项目的样例生成脚本:

plugins {
    id "java-library"
    id "org.springframework.boot" version "2.1.4.RELEASE"  apply false // do not apply it
}
apply plugin: "io.spring.dependency-management"

dependencies {
    // Spring Boot deps 
    implementation "org.springframework.boot:spring-boot-starter-web"

    // libraries you want to "propagate to consumers
    // api group: 'com.google.guava', name: 'guava', version: '23.0'

    // libraries you don"t want to flow in consumers projects
    // implementation ....

    // Test deps
    testImplementation "org.springframework.boot:spring-boot-starter-test"
}
dependencyManagement {
    imports {
        mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
    }
}

你能提供更多关于图书馆项目的细节吗?你说它对Java Boot有一些依赖性(你是说SpringBoot吗?)如果是,你想把这个库打包成一个SpringBoot可执行文件/fatjar并包含部分依赖性吗?对不起,是的,我是说Spring Boot应用程序将包含所有必要的Spring Boot依赖性。因此,该库不应将任何已编译的Spring Boot库“带入”其已编译代码中。该库将需要在运行时使用Spring Boot代码。您能否提供有关该库项目的更多详细信息?您说它对Java Boot有一些依赖性(您是指SpringBoot吗?)如果是,是否要将此库打包到包含部分依赖项的SpringBoot可执行文件/fatjar中?抱歉,是的,我的意思是Spring Boot应用程序将包含所有必要的Spring Boot依赖项。因此,该库不应“任何已编译的Spring Boot库都将转换为其已编译代码。该库将需要在运行时使用Spring Boot代码。谢谢,这正是我要找的!谢谢,这正是我要找的!