gpt4 book ai didi

java - 配置 .jar 以公开其依赖项

转载 作者:行者123 更新时间:2023-12-02 09:51:51 25 4
gpt4 key购买 nike

我有 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

如果我将注释作为项目包含在项目中,我可以跳过此错误,但随后我得到了。

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 库的新手,可能我犯了一个基本错误,但似乎无法弄清楚,我已经研究了一天多了。

最佳答案

您必须创建一个多模块 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

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

请参阅下面的链接。

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

关于java - 配置 .jar 以公开其依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56270531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com