首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分级多点构建api(project(.))依赖关系停止工作

分级多点构建api(project(.))依赖关系停止工作
EN

Stack Overflow用户
提问于 2022-11-28 15:58:33
回答 1查看 24关注 0票数 0

所以我在kotlin得到了一个由多个子项目组成的项目。它们都是与单个settings.gradle文件链接的。这一切都很好,直到一周后编码的另一部分,我注意到,我从一个模块获得了大量的编译错误。因此,我开始挖掘,发现Intellij无法从另一个子项目导入类,即使它通过api project(':lib:content:model')依赖于它。我不知道为什么它停止工作,试图在没有intellij的情况下构建这个项目,只是使用graddlew。然后我发现了奇怪的错误:

命令:./gradlew :lib:game:model:build

代码语言:javascript
复制
FAILURE: Build failed with an exception.

* What went wrong:
Circular dependency between the following tasks:
:lib:game:model:classes
\--- :lib:game:model:compileJava
     +--- :lib:game:model:compileKotlin
     |    +--- :lib:game:model:jar
     |    |    +--- :lib:game:model:classes (*)
     |    |    +--- :lib:game:model:compileJava (*)
     |    |    +--- :lib:game:model:compileKotlin (*)
     |    |    \--- :lib:game:model:kaptKotlin
     |    |         +--- :lib:game:model:jar (*)
     |    |         \--- :lib:game:model:kaptGenerateStubsKotlin
     |    |              \--- :lib:game:model:jar (*)
     |    \--- :lib:game:model:kaptKotlin (*)
     \--- :lib:game:model:jar (*)

(*) - details omitted (listed previously)

我试着用谷歌搜索它,但互联网上的任何建议对我都没有用。最奇怪的是,它曾经在我以前写的时候起作用。然后我切换到另一个模块,当我回来的时候,就像这样,坏了=

我试图将被窃听的代码隔离到测试中,最后得到了包含两个子模块contentgamecontent模块。另一个是project-types模块,我在其中存储gradle插件以克服配置重复。content项目只有一个子项目名为modelgame项目有三个子项目:apiimpl和还有'model`‘。

lib->game->model项目依赖于lib->content->model lib->game->impl项目依赖于lib->game->api

因此,另一件非常奇怪的事情是,即使lib->game->impl依赖于lib->game->api,它也能很好地工作和编译。但是对于使用相同机制依赖于‘lib->内容->模型’的‘lib->游戏->模型,同样的事情不起作用。

所以我迷路了,不知道该怎么办。有一个很好的理由,我需要他们都是不同的项目,但我不想让自己在地狱中发布新的工件到本地回购每次我改变代码在其中之一。有人能帮我把它修好吗

我的./gradlew -q projects输出:

代码语言:javascript
复制
------------------------------------------------------------
Root project 'test'
------------------------------------------------------------

Root project 'test'
\--- Project ':lib'
     +--- Project ':lib:content'
     |    \--- Project ':lib:content:model'
     \--- Project ':lib:game'
          +--- Project ':lib:game:api'
          +--- Project ':lib:game:impl'
          \--- Project ':lib:game:model'

Included builds
\--- Included build ':project-types'

project-types包含commonkotlin-project子项目。

common build.gradle:

代码语言:javascript
复制
plugins {
    id 'groovy-gradle-plugin'
}
repositories {
    mavenCentral()
}

和src中的commons.gradle文件:

代码语言:javascript
复制
plugins {
    id 'java'
}

repositories {
    mavenCentral()
    mavenLocal()
}

dependencies {
    implementation 'com.fasterxml.jackson.core:jackson-core:2.13.4'
    implementation 'com.fasterxml.jackson.core:jackson-annotations:2.13.4'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.4'
    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4'
    implementation 'com.fasterxml.jackson.module:jackson-module-paranamer:2.13.4'

    implementation 'org.slf4j:slf4j-api:1.7.36'
    implementation 'ch.qos.logback:logback-classic:1.2.11'

    implementation 'commons-io:commons-io:2.11.0'
    implementation 'org.apache.commons:commons-lang3:3.12.0'
    implementation 'commons-codec:commons-codec:1.15'
}

kotlin-project build.gradle文件:

代码语言:javascript
复制
dependencyResolutionManagement {
    repositories {
        mavenLocal()
        mavenCentral()
        gradlePluginPortal()
        google()
    }
}

rootProject.name = 'project-types'

include 'commons'
include 'kotlin-project'

它是src中的kotlin-project.gradle文件:

代码语言:javascript
复制
plugins {
    id 'commons'
    id 'org.jetbrains.kotlin.jvm'
    id 'org.jetbrains.kotlin.kapt'
}

dependencies {
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
    implementation 'org.jetbrains.kotlin:kotlin-reflect'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4'

    implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'

    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.1'
    testImplementation 'org.junit.jupiter:junit-jupiter-params:5.9.1'
    testImplementation 'org.mockito:mockito-junit-jupiter:4.8.1'
    testImplementation 'org.mockito.kotlin:mockito-kotlin:4.0.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.1'

}

test {
    useJUnitPlatform()
}

compileKotlin {
    kotlinOptions.jvmTarget = '17'
    kotlinOptions.freeCompilerArgs = ['-Xjsr305=strict', '-Xemit-jvm-type-annotations']
}

compileTestKotlin {
    kotlinOptions.jvmTarget = '17'
    kotlinOptions.freeCompilerArgs = ['-Xjsr305=strict', '-Xemit-jvm-type-annotations']
}

kapt {
    correctErrorTypes = true
}

所以我的主要项目结构是:

我的./setting.gradle文件内容:

代码语言:javascript
复制
rootProject.name = 'test'

includeBuild 'project-types'

include 'lib:game'
include 'lib:game:model'
include 'lib:game:api'
include 'lib:game:impl'

include 'lib:content'
include 'lib:content:model'

./build.gradle文件内容

代码语言:javascript
复制
plugins {
    id 'org.jetbrains.kotlin.jvm' version "1.7.21" apply false
    id 'org.jetbrains.kotlin.kapt' version "1.7.21" apply false
}
repositories {
    mavenCentral()
}

./lib/content/model/build.gradle文件内容:

代码语言:javascript
复制
plugins {
    id 'kotlin-project'
}

group 'cvazer.test'
version '1.0.0'

dependencies {

}

./lib/game/api/build.gradle文件内容:

代码语言:javascript
复制
plugins {
    id 'kotlin-project'
}

group 'cvazer.test'
version '1.0.0'

dependencies {

}

./lib/game/impl/build.gradle文件内容:

代码语言:javascript
复制
plugins {
    id 'kotlin-project'
}

group 'cvazer.test'
version '1.0.0'

dependencies {
    api project(':lib:game:api')
}

./lib/game/model/build.gradle文件内容:(有问题的)

代码语言:javascript
复制
plugins {
    id 'kotlin-project'
}

group 'cvazer.test'
version '1.0.0'

dependencies {
    api project(':lib:content:model')
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-28 23:48:17

如果两个子项目名称相同,即使路径不同,Gradle也有解决依赖关系的问题。

你有两个子项目,都叫做“模型”

  • :lib:game:model
  • :lib:content:model

格拉德尔无法区分他们。

我建议将您的子项目重命名为更漂亮,不嵌套,并使每个子项目的名称都是唯一的。

代码语言:javascript
复制
└── lib/
    ├── game
    ├── game-model
    ├── game-api
    ├── game-impl
    ├── content
    └── content-model
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74603267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档