4

我的项目使用多个 Gradle 源集作为其生产代码库,而不仅仅是main

  • domain
  • dal
  • rest
  • test
  • dbUnitTest

事实证明,这对于限制依赖关系和执行关注点分离非常有用。

然而,它有一个缺点:我们无法从测试类中访问具有可见性的类或方法。internal这样做的原因是 Kotlin 编译器将每个源集放在它自己的“模块”中:

$ find . -name '*.kotlin_module'
./classes/kotlin/domain/META-INF/contact-management_domain.kotlin_module
./classes/kotlin/dal/META-INF/contact-management_dal.kotlin_module
./classes/kotlin/rest/META-INF/contact-management_dal.kotlin_module
./classes/kotlin/test/META-INF/contact-management.kotlin_module
./classes/kotlin/dbUnitTest/META-INF/contact-management_dbUnitTest.kotlin_module

我希望所有源集都使用相同的模块名称“联系人管理”,因为默认情况下主源集。

我试图用编译器选项覆盖名称-module-name

tasks.withType<KotlinCompile> {
    kotlinOptions {
        // place all source sets in the same kotlin module, making objects with 'internal' visibility available to every source sets of this project
        freeCompilerArgs += listOf("-module-name \"contact-management\")
    }
}

跑步后gradlew build,我得到

> Task :contact-management:compileDomainKotlin FAILED
e: Invalid argument: -module-name "contact-management"

原因-module-name "contact-management_domain"是之前由调用 Kotlin 编译器的 Gradle 代码设置的,但显然这个选项只被接受一次。

在 Gradle 构建中,如何控制Kotlin 编译器认为是“一个模块”的内容?

到目前为止,要拆分源集的相关问题还没有令人满意的答案。test

4

0 回答 0