【问题标题】:Configure .jar to expose its dependencies配置 .jar 以公开其依赖项
【发布时间】:2019-10-09 18:01:56
【问题描述】:

我有 3 个模块:annotationsannotation_processorapp

注解/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)

我无法从 annotation_processor 访问任何依赖项(Java Poet 和 annotation 模块),即使我已将 implementation 替换为 api强>。哪个应该暴露依赖关系,但没有。

我需要app模块中.jar文件的依赖关系。

我是 Java 库的新手,可能是我犯了一个基本错误,但似乎无法弄清楚,我已经做了一天多。

【问题讨论】:

    标签: java android gradle module java-annotations


    【解决方案1】:

    您必须创建一个多模块 gradle 项目。

    我提供了一个多模块项目的小sn-p。

    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

    如果你想创建一个 fat jar 或一个 jar,你必须包含 Gradle shadow 插件,以便你可以将 jar 文件与其他依赖项一起分发。

    参考下面的链接。

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

    【讨论】:

    • 这是一个多模块项目,不知道你的意思。
    • 是的,我已经尝试过了,但问题是它确实暴露了我想创建一个可分发的 .jar 的依赖项,第三方开发人员无需太多配置即可使用它。所以我真的需要暴露来自.jar的依赖关系。
    • 基本上,你想创建一个 jar。我已经更新了答案。
    • 我想这就是我要找的那个。我会试试,让你知道是否是这样。非常感谢。
    猜你喜欢
    • 2012-02-12
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 2021-09-10
    • 2020-06-02
    相关资源
    最近更新 更多