Using Kotlin class in Java: Cannot find symbol
Your Maven configuration adds the Kotlin compiler plugin, but doesn't adjust the Java compiler plugin execution so that the Java compiler runs after the Kotlin compiler. Therefore, the Java compiler runs before Kotlin, and doesn't see Kotlin-compiled classes.
Here's a snippet showing the correct configuration for a mixed-language project (taken from the documentation):
<build>
<plugins>
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<goals> <goal>compile</goal> </goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
<sourceDir>${project.basedir}/src/main/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<goals> <goal>test-compile</goal> </goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
<sourceDir>${project.basedir}/src/test/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<executions>
<!-- Replacing default-compile as it is treated specially by maven -->
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
<!-- Replacing default-testCompile as it is treated specially by maven -->
<execution>
<id>default-testCompile</id>
<phase>none</phase>
</execution>
<execution>
<id>java-compile</id>
<phase>compile</phase>
<goals> <goal>compile</goal> </goals>
</execution>
<execution>
<id>java-test-compile</id>
<phase>test-compile</phase>
<goals> <goal>testCompile</goal> </goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
If you are using Android Studio and have already added the Kotlin plugins via Settings -> Plugins -> Kotlin, then it could be that you haven't setup the rest of Gradle to use Kotlin. Here's a snippet from https://medium.com/@elye.project/setup-kotlin-for-android-studio-1bffdf1362e8:
Step 1: Setup the Kotlin Plugin in Android Studio
Android Studio → Preferences… →Plugins → Browse Repository → type “Kotlin” in search box → install
Step 2: Add Kotlin classpath to project Build.Gradle
buildscript {
ext.kotlin_version = "1.1.1"
ext.supportLibVersion = "25.3.0"
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
Step 3: Add Kotlin library and apply Kotlin Plugins in your module Build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
// ... various gradle setup
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile "com.android.support:appcompat-v7:$supportLibVersion"
compile "com.android.support:recyclerview-v7:$supportLibVersion"
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
I ran into this same error, but had the correct pom setup. My issue was that I had just converted a Java class to a Kotlin class with Intellij, which left that Kotlin file in src/main/java
.
The solution for me was to create a src/main/kotlin
and move my Kotlin class there, and leave my Java files in src/main/java
. But you do definitely need the maven setup that @yole's answer shows.