Библиотека Java, зависимости которой предоставляются при реализации приложения - PullRequest
1 голос
/ 15 мая 2019

Я работаю с Gradle и двумя отдельными проектами, где один проект будет библиотекой, которую я хочу скомпилировать в реализуемый jar, который можно будет использовать в другом проекте (приложении), а также в других проектах.

В моей библиотеке я использую Java Boot и некоторые библиотеки Google. Что мне нужно указать в файле Gradle моей библиотеки, чтобы при компиляции Java Boot и другие библиотеки не компилировались в этот jar, увеличивая его размер?

Мое приложение, реализующее мой библиотечный jar, должно обеспечивать эти библиотеки. Нужно ли мне указывать что-либо конкретное в моем файле Gradle моего приложения в этом сценарии?

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Из этой части вашего вопроса:

[...] Java Boot и другие библиотеки не скомпилированы в этот jar, увеличивая его размер.

Я понимаю, что вы применили плагин Springboot к своей библиотеке (который по умолчанию создает толстый файл jar с учетом всех зависимостей), в то время как вы просто хотите создать простую / простую библиотеку java.

Если мое предположение верно, самое простое решение - использовать плагин Springboot только для управления зависимостями, фактически не применяя его к вашему проекту, как объяснено здесь .

Вам также следует применить плагин для библиотеки Java Gradle , чтобы воспользоваться функцией разделения 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
    }
}
0 голосов
/ 15 мая 2019

Вы можете определить зависимости проекта библиотеки как compileOnly:

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

Таким образом, ваша зависимость не будет экспортирована и не будет упакована ни в какие артефакты.

Если вам нужна эта зависимость в тестах, вам также нужно настроить ее на testImplementation.

...