maven


Error trying to instantiate a Kotlin class from Java


I am trying to instantiate a Kotlin class from Java but every time I try to compile with Maven I get the error cannot find symbol:
class ConfigCommand(private val game: Game) : Command("config", "") {
init {
addAliases("cfg")
}
override fun getRequiredRank(): Rank? {
return null
}
override fun getDescription(): String {
return "Shows the config for the game"
}
#Throws(CommandException::class)
override fun execute(sender: CommandSender, args: Array<String>): Boolean {
if (args.isEmpty()) {
if (sender !is Player)
throw NoConsoleAccessException()
sender.openInventory(ConfigGUI(game).build())
return true
}
return false
}
}
Not sure why that didn't format correctly but anyway before I converted it to a Kotlin class it worked but I need to register this command in my main class which is a Java class. When I try to instantiate a Kotlin class from a Java class there are no errors in the IDE but when I go to compile it maven screams
cannot find symbol
[ERROR] symbol: class ConfigCommand
I'm still figuring out Kotlin, but I tried to work through a few permutations based on your example. I was easily able to create your problem based on your Hastebin pom.
You were right that changing the <phase> to process-sources got my test code to compile in Maven, but I (honestly) can't always remember all the Maven phases off the top of my head so I wouldn't personally be comfortable with changing to process-sources without more research -- especially since the IntelliJ tooling relies on the compile phase.
After playing around with my own interop examples, it seems like the critical (and missing from the tooling defaults) piece is the <sourceDirectory> element as a top-level child of <build> as in:
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<plugins>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
Adding the <sourceDirectory> as a top-level element under <build> made my Java to Kotlin interop code compile when I ran the mvn compile terminal command. That was true when I mixed the source files in the "java" directory to contain both Java and Kotlin files.
As a side note (and I don't I understand why as I write this), when I added "Kotlin" as part of my class name to my Kotlin source I didn't need to add the <sourceDirectory> element...
After going trough this page multiple times and realizing that I had done nothing wrong I started to just mess around with my pom and eventually got it working by changing the phase of the Kotlin compile to process-sources
The maven-compiler-plugin adds default executions default-compile and default-testCompile that run first in the corresponding phases.
In order to use Kotlin classes in Java code, you need to run Kotlin compiler before Java compiler runs. One way to do it is to schedule its execution to process-sources phase. Another approach is to "unschedule" default executions of Java plugin and schedule new executions instead after the execution of Kotlin plugin.
The default executions of Java plugin are turned off with this section of pom.xml:
<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>
...
</executions>
</plugin>
And then new executions are added:
<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>
The full example is shown here: https://kotlinlang.org/docs/reference/using-maven.html#compiling-kotlin-and-java-sources

Related Links

how do I get maven to tell me what jar it would build without building it?
1.0.0-SNAPSHOT in two Nexus repositories of one group
Failure to find org.jenkins-ci.plugins:plugin:pom:2.11 in https://repo.maven.apache.org/maven2
Cobertura wrong coverage reporting issues
Configuration of Maven profile to connect with SonarQube which is using LDAP
docker, maven start failed: Connection is still allocated
Build Failure while while building the Apache Zeppelin
Use EndptEnabler with maven
What is the final dependency scope when different scopes are specified for one JAR?
Maven and JavaFX project in IntelliJ IDEA
Nexus directory storage/repositoryName/.nexus/attributes - What is it for?
Gradle Support for GCP Dataflow Templates?
OWASP Dependency check : Adding modelVersion version to dependency check report
How to integrate maven with Protractor for CI/CD
Payara-Micro Embedded with Java EE
Determining the existence of a new SNAPSHOT version of dependencies in Nexus?

Categories

HOME
vim
log4j
testng
debugging
google-play
getelementsbytagname
django-imagekit
in-app-purchase
add
metatrader4
spring-kafka
size
msp430
dynamics-crm-online
vaadin7
dbext
reverse-proxy
object-detection
google-search-api
mmap
tibco-mdm
captiveportal
php-openssl
microsoft-r
claims-based-identity
icloud-api
pepper
cas
su
django-storage
strncpy
ejabberd-module
atlassian-crucible
sql-server-2012-express
http-status-code-503
twilio-api
xquery-3.0
jspresso
noraui
framemaker
avcapturesession
uiswipegesturerecognizer
mapdb
file-format
espeak
android-browser
estimote
babel-core
logfiles
statsd
setter
snmptrapd
titanium-android
dwscript
specrun
visual-c++-2008
grails-tomcat-plugin
libpng
multi-level
bstr
jwplayer7
qgraphicsview
php-internals
system.management
reactive-banana
endeca-workbench
twirl
unity5.2.3
jsapi
formatjs
sorl-thumbnail
phalanger
xojo
fluentautomation
mechanize-ruby
rtmfp
terminal-services
google-cloud-save
ora-00911
gwt-rpc
kyotocabinet
unc
frameset
wse3.0
semantic-diff
pendrive
libc++
vdsp
file-comparison
mongomapper
jmock
nerddinner

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App