Сконфигурируйте .jar, чтобы выставить его зависимости - PullRequest
0 голосов
/ 23 мая 2019

У меня есть 3 модуля: annotations, annotation_processor и app.

аннотации / build.gradle

apply plugin: 'java-library'

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
}

annotation_processor / build.gradle

apply plugin: 'java-library'

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    api project(":annotations")

    api "com.squareup:javapoet:1.11.1"
}

repositories {
    mavenCentral()
}

sourceCompatibility = "1.8"
targetCompatibility = "1.8"

task deleteJar(type: Delete) {
    delete 'libs/annotations.jar'
}

task createJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('libs/')
    include('classes.jar')
    rename('classes.jar', 'annotations.jar')
}

createJar.dependsOn(deleteJar, build)

и app / build.gradle

dependencies {
    ...
    implementation files('libs/annotation_processor.jar')
    annotationProcessor files('libs/annotation_processor.jar')
    ...
}

Когда я запускаю проект, я получаю следующую ошибку:

error: package com.annotations does not exist

Если я включу annotations в качестве проекта в проектЯ могу пропустить эту ошибку, но затем получаю.

Caused by: java.lang.NoClassDefFoundError: com/annotations/ProviderApi
at com.annotation_processor.ProviderAnnotationProcessor.getSupportedAnnotationTypes(ProviderAnnotationProcessor.java:45)
at org.gradle.api.internal.tasks.compile.processing.DelegatingProcessor.getSupportedAnnotationTypes(DelegatingProcessor.java:47)
at org.gradle.api.internal.tasks.compile.processing.NonIncrementalProcessor.getSupportedAnnotationTypes(NonIncrementalProcessor.java:33)
at org.gradle.api.internal.tasks.compile.processing.DelegatingProcessor.getSupportedAnnotationTypes(DelegatingProcessor.java:47)
at org.gradle.api.internal.tasks.compile.processing.TimeTrackingProcessor.access$101(TimeTrackingProcessor.java:37)
at org.gradle.api.internal.tasks.compile.processing.TimeTrackingProcessor$2.create(TimeTrackingProcessor.java:68)
at org.gradle.api.internal.tasks.compile.processing.TimeTrackingProcessor$2.create(TimeTrackingProcessor.java:65)
at org.gradle.api.internal.tasks.compile.processing.TimeTrackingProcessor.track(TimeTrackingProcessor.java:117)
at org.gradle.api.internal.tasks.compile.processing.TimeTrackingProcessor.getSupportedAnnotationTypes(TimeTrackingProcessor.java:65)

Я не могу получить доступ ни к одной из зависимостей (Java Poet и annotation module) из annotation_processor , даже если я заменил реализация с API .Который должен был выставить зависимости, но не сделал.

Мне нужны зависимости файла .jar в модуле app.

Я новичок в библиотеке Java ивозможно, я совершаю основную ошибку, но, похоже, не могу понять, я занимаюсь этим уже больше суток.

1 Ответ

1 голос
/ 23 мая 2019

Необходимо создать многомодульный проект Gradle.

Я предоставляю небольшой фрагмент многомодульного проекта.

project(':module1') { 
   dependencies {
      compile project(':module-service-api')
      compile 'org.apache.commons:commons-lang3:3.3.2'
      compile 'log4j:log4j:1.2.17'
   }
} 

//module-app depends on module-service-impl
project(':module2') { 
   dependencies {
      compile project(':module1')
   }

Для получения дополнительной информации о многомодульном проекте см.файл build.gradle в следующем проекте.

https://github.com/debjava/gradle-multi-module-project-1

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

См. ссылку ниже.

https://plugins.gradle.org/plugin/com.github.johnrengelman.shadow

...