Java库通过实现应用程序提供了依赖关系



我正在与gradle和两个独立的项目一起工作,其中一个项目将是我想编译为可实现的JAR中的库,可以在另一个项目(APP(中使用它以及其他项目。

在我的库中,我依靠Java启动和一些Google库。我需要在库的gradle文件中指定什么,这些库上的Java启动和其他库未汇编成该罐子,以吹大其尺寸?

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

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

dependencies {
  compileOnly group: 'com.google.guava', name: 'guava', version: '27.0-jre'
}

这样,您的依赖性将不会出口,也不会包装到任何文物中。

如果您在测试中需要此依赖项,也需要在testImplementation配置中。

来自您问题的这一部分:

[...] Java靴子和其他库未被编译到该罐子中炸毁其大小。

我了解您已将Springboot插件应用于库(默认情况下会产生一个胖罐子,其中包括所有依赖项(,而您只想创建一个简单/普通的Java库。

如果我的假设是正确的,那么最简单的解决方案是仅将Springboot插件用于依赖项管理,而无需将其实际应用于您的项目。

您还应该应用Gradle Java库插件,以受益于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
    }
}

最新更新