有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java配置。jar来公开其依赖项

我有3个模块:annotationsannotation_processorapp

注释/构建。格拉德尔

apply plugin: 'java-library'

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

注释\u处理器/构建。格拉德尔

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)

和应用程序/构建。格拉德尔

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模块),即使我已将实现替换为api。它应该公开依赖项,但没有

我需要app模块中.jar文件的依赖项

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


共 (1) 个答案

  1. # 1 楼答案

    您必须创建一个多模块渐变项目

    我提供了一个多模块项目的小片段

    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')
       }
    

    有关多模块项目的更多详细信息,请参阅文件构建。gradle在下面的项目中

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

    如果您想创建一个胖jar或一个jar,那么必须包含gradleshadowplugin,以便可以将jar文件与其他依赖项一起分发

    请参阅下面的链接

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