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 to wildcard attach multiple files to an artifact in maven?
SCM-Activity-Plugin and Taglist in SONAR
Maven - Is it possible to specify mirror in pom.xml?
Maven: Show comment/alert in console when a dependency is used (compile/package/…)
Remove filter in web.xml in jetty
How to execute code before TestNG for ie. building up the test suite
Reading a maven settings.xml when building with gradle?
Maven Nested Multi-module project
mvn clean package, I want to copy the created jar to the current directory
Merging configuration values in Maven
In Maven 3 how can I use project.version for the module as a dependency to another project
jmeter plugin maven test-jar
i am getting “Missing artifact groupId:artifactId:version:lifecycle ” while compiling the project
Best way to auto compile compass-style SASS via maven
How to configure multi-module Maven + Sonar + JaCoCo to give merged coverage report?
maven determine default lifecycle phase for plugin

Categories

HOME
amazon-ec2
platform-builder
yahoo-oauth
filtering
echarts
networkx
append
facebook-messenger-bot
wheelnav.js
numeral.js
remote-access
task
hex-editors
fatal-error
textfield
emulator
arabic
kvc
blazemeter
su
assistant
ejabberd-module
stormpath
exuberant-ctags
column-family
code-contracts
usbserial
vsts-build-task
accelerate-framework
gammu
mapbox-gl
mmenu
fusionpbx
overlap
az-application-insights
avro4s
elmah
sencha-touch-2.3
apache-fop
alphabet
hls.js
yii2-extension
drupal-6
lift-json
snmptrapd
nsarray
python-cryptography
flutterwave
persist
ubuntu-10.04
hover-over
rvest
itextpdf
jfugue
spim
spidermonkey
libressl
pundit
ionic
splash
ios9.1
apache-commons-fileupload
system.reflection
gadt
angularjs-ng-click
device-manager
openexr
elliptic-curve
doskey
undefined-reference
intentservice
multiprocessor
coverflow
seed
orchardcms-1.7
eventlistener
android-hardware
factory-method
selected
itmstransporter
gil
chrono
punbb
subscript
spyware
external-accessory
blackberry-playbook
disclosure
cxxtest
subviews
h.323
createwindow
mozilla-prism
javap
backcolor
swing-app-framework
nerddinner
mdac
ugc
document-conversion

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