首页 > 解决方案 > 无法在使用 kotlin dsl 的 scala-java polyglot gradle 项目中的 java 编码中使用 scala 类

问题描述

我使用 gradle kotlin dsl 构建了 scala/java polyglot 项目[gradle-scala-java-polyglot-project]1 。

下面是项目结构

± tree .
├── build.gradle.kts
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle.kts
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── example
    │   │           └── User.java
    │   ├── resources
    │   └── scala
    │       └── com
    │           └── example
    │               ├── Book.scala
    │               └── main
    │                   └── MainApp.scala
    └── test
        ├── java
        └── resources

如您所见,java 代码有一个类com.example.User.java,scala 有两个类com.example.Book.scalacom.example.main.MainApp.scala.

当 scala 类使用 java 类时,构建成功。

但是当我在 java 类中使用 scala 类时,我得到符号未找到错误。

下面是项目构建文件。

plugins {
    java
    scala
}

group = "org.example"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

scala {
    zincVersion.set("1.3.5")
}

sourceSets {
    main {
        withConvention(ScalaSourceSet::class) {
            scala {
                setSrcDirs(listOf("src/main/scala", "src/main/java"))
            }
        }
    }
    test {
        withConvention(ScalaSourceSet::class) {
            scala {
                setSrcDirs(listOf("src/test/scala", "src/test/java"))
            }
        }
    }
}

dependencies {
    implementation("org.scala-lang:scala-library:2.13.5")
    implementation("org.scala-lang:scala-compiler:2.13.5")
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.6.0")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
}

该项目也在github上。如何混合使用 java/scala 类并修复此错误?

注意:我的项目使用 scala 2.13.5 版本的 scala。

标签: gradlegradle-kotlin-dslgradle-scala

解决方案


推荐阅读