1

I have scala/java polyglot project [gradle-scala-java-polyglot-project]1 build using gradle kotlin dsl.

Below is the project structure

± 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

As you see java code has one class com.example.User.java and scala has 2 classes com.example.Book.scala and com.example.main.MainApp.scala.

when scala classes uses java classes the build is successful.

But when I use scala class inside java classes I get symbol not found error.

Below is the project build file.

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")
}

The project is on github as well. How can I make mixed use of java/scala class together and fix this error?

Note: My project uses scala 2.13.5 version of scala.

user51
  • 8,843
  • 21
  • 79
  • 158

0 Answers0