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 install a POM in my local m2 repository?
java.lang.IllegalArgumentException: Null value not allowed as an environment variable: POM_PACKAGING
Turn off or configure java.util.Logging during Maven build
How to version number a project?
Ivy variable equivalent to Maven
copy jars used by plugin to single folder using Maven
Maven behind a auto-generated proxy
NetBeans IDE Recognize a Grails application as a Maven project
Maven deploy exclude logback.xml file
Cannot find MySql 5.6.17 dependency in central Maven repo
How to get Maven groupId, artifactId & project version to the command line
What should be the maven archetype of a Custom AutoLogin for LifeRay
How to create a JSF2.2 + EJB3 + JPA2 project using maven archetype
Super POM Manifest Entries not being used
How do I create a project based on multiple poms and allow refactoring between them?
Maven modules - how to build only child projects that exist in my workspace?

Categories

HOME
sendgrid
ionic-framework
tizen
view
spring-cloud-stream
microservices
cakephp-2.5
v8
ezpublish
enterprise-library-5
opengl-es-2.0
autotools
slick-slider
vifm
php-7.1
task
windows-phone-7
windows-server-2012
ups
decomposition
percona
lombok
libtiff
invantive-sql
reactive-cocoa
connection-string
oracle-coherence
nhibernate-envers
google-pagespeed
tar
graphicsmagick
wkwebview
dcevm
format-specifiers
icloud-api
numerical-methods
cas
facebook-access-token
uninstall
social-media
assistant
vision
bpel
key-value-observing
preg-match-all
siesta-swift
protovis
wallpaper
abstract-class
sharefile
vapor
streamreader
android-tabhost
gulp-sourcemaps
janrain
firebase-admin
eigenvalue
password-encryption
checkboxlist
wptoolkit
menuitem
filepicker
atomicity
pango
paxos
colorama
worker-thread
android-cursor
pdfclown
mako
flow-control
sqldf
django-scheduler
objective-c-swift-bridge
color-picker
mikroc
websitepanel
hexdump
bluegiga
ptrace
two-factor-authentication
netmq
eclipse-clp
computer-algebra-systems
sframe
method-parameters
operation
createprocessasuser
c++03
typekit
preferences
mesa
eol
undefined-reference
prettify
xsockets.net
jsctypes
aqtime
spring-validator
html-editor
flashvars
http-unit
referrer
pvrtc
work-stealing
gnustep
nsobject
xmlspy
appendto
disclosure
mysql-error-1005
suppress
compiler-specific
sector
misv

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