java配置。jar来公开其依赖项
我有3个模块:annotations
、annotation_processor
和app
注释/构建。格拉德尔
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 楼答案
您必须创建一个多模块渐变项目
我提供了一个多模块项目的小片段
有关多模块项目的更多详细信息,请参阅文件构建。gradle在下面的项目中
https://github.com/debjava/gradle-multi-module-project-1
如果您想创建一个胖jar或一个jar,那么必须包含gradleshadowplugin,以便可以将jar文件与其他依赖项一起分发
请参阅下面的链接
https://plugins.gradle.org/plugin/com.github.johnrengelman.shadow