当前位置: 首页 > 知识库问答 >
问题:

Gradle Kotlin用Java模块构建DSL多项目

单于帅
2023-03-14

我正在创建一个新项目(使用IntelliJ IDEA),该项目将使用:

  • 分级作为构建系统
  • 构建脚本的Kotlin DSL
  • “组织”的Java 9模块
  • 科特林语作为主要语言

我有问题设置Gradle正确地建立我的项目。我找到的大多数示例都是针对Groovy而不是Kotlin DSL的,而且大多数示例只覆盖了我想要的一些特性,而不是全部。

plugins {
    base
    kotlin("jvm") version "1.3.41" apply false
}

subprojects {
    afterEvaluate {
        tasks.withType<JavaCompile> {
            inputs.property("moduleName", extra["moduleName"])
            options.compilerArgs.addAll(arrayOf("--module-path", classpath.asPath))
            classpath = files()
        }
    }

    repositories {
        mavenCentral()
        jcenter()
    }
}
extra.set("moduleName", "myproject.core")

plugins {
    kotlin("jvm")
}

dependencies {
    compile(kotlin("stdlib"))
    compile(project(":networking"))
}

lib/build.gradle.kts

extra.set("moduleName", "myproject.lib")

plugins {
    kotlin("jvm")
}

dependencies {
    compile(kotlin("stdlib"))
}

执行此操作时,配置将失败:

配置项目“:core”时出现问题。

我假设问题是我的根build.gradle.kts,但我不知道如何使其工作。谷歌搜索发现,Kotlin DSL for Gradle有点新,使用不太广泛,文档也很少。

任何建议都将不胜感激!

共有1个答案

盖弘毅
2023-03-14

很自然地,在发布了这个问题后,我找到了解决方案。有一个Gradle插件可以完成这种情况下所需的工作,例如KotlinDSL示例:https://github.com/java9-modularity/gradle-modules-plugin/tree/master/test-project-kotlin

使用该插件,我所需要做的就是更改根build.gradle.kts文件:

plugins {
    base
    kotlin("jvm") version "1.3.41" apply false
    id("org.javamodularity.moduleplugin") version "1.5.0" apply false
}

subprojects {
    apply(plugin = "org.javamodularity.moduleplugin")

    repositories {
        mavenCentral()
        jcenter()
    }
}

注意:确保module-info.java文件位于javasrc文件夹中,而不是kotlinsrc文件夹中,否则插件将检测不到该模块。

 类似资料:
  • 嗨我在网上搜了一遍,看了一堆文章,所以问题和文档都找不到解决办法,这里是我的问题。 我有一个多模块maven项目,其中包含三个模块a、B和C,a和B独立,C依赖于a和B,当然我有一个父项目。我还设置了一个jenkins服务器来构建这些项目,以及一个nexus存储库。 如有任何帮助,不胜感激。谢谢!

  • 主要内容:1- 介绍,2- 示例模型,3-创建项目数学库,4- 创建另一个项目:MathWebApp,5- 创建GradleMain项目,6- 构建项目,7- 运行MathWebApp1- 介绍 本教程文章基于: Eclipse Java EE IDE for Web Developers. Version: Mars.1 Release (4.5.1) 如果您是初学者Gradle的。那么建议先看看初学者Gradle(Gradle Hello world)的文章: http://www.yiib

  • 问题内容: 我有一个多模块Maven项目,其中有多个微服务作为模块,因此我的父母中列出了一些模块,如下所示: 这里是依赖项,因此我在下面列出了依赖项 : 当我在本地运行时,按预期方式在被调用之前,但是在詹金斯中,它正在尝试构建然后使构建失败说: 我是否需要运行其他作业或重新排序模块,从本地到Jenkins有什么不同?感谢对此的任何帮助。 问题答案: 众所周知,问题在于子模块之间的依赖关系失败,因为

  • 编译项目 当我们只想对修攺过的文件进行编译时就会使用Make进行编译.它可以指定对项目(Project)或模块(Module)进行编译. 编译项目会同时编译当前项目中所有的模块 ,如果代码较多, 编译时间会比较长.如果想编译快一点需要指定编译某个模块. 操作步骤: 菜单栏 --> Build --> Make Project 快捷键: Mac: Command + F9 Windows\/Linu

  • 我将转向maven多模块构建。 我的项目结构如下所示: 是一个Maven Eclipse项目,由M2E构建。 我添加了MyProject-Core/src/main/java作为Eclipse源文件夹,但由于我将父pom中的依赖项部分更改为dependencyManagement,因此我从Eclipse中得到了构建错误。手动调用mvn包仍然可以正常工作。 如何配置Eclipse以正确解决核心pom

  • 我最近开始学习java处理器,并尝试将它们与gradle一起使用,当我构建项目时,我可以看到注释处理器JAR(其他模块)被打印出来(我在app gradle文件中添加了这一点,您可以在下面看到),但没有执行。我不知道我做错了什么...