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 deal with dependencies with “provided” scope in OSGi
How do I run Maven integration tests in alphabetical order?
Is there a way to specify several Jenkins files for the pipeline?
Ant running from maven-antrun-plugin can't find scripting engine on Java 9
how to export changed files after build between two versions
Maven : How to compare sub-modules of two modules of a mult-module project?
mvn clean to delete test-output folder?
How to properly debug Spring MVC Weblogic 12 application
Using Spring Boot without the parent POM [duplicate]
Where can I manually download WebJars from?
Can not build the project after upgrading to mule version 3.8.4 to 3.7.4
cloudant connection issue liberty maven
Update version number in parent tag
How can i have a property in the compile group gradle file
Maven Plugin Signature Check Error
noclassdeffounderror with “com/sun/jna/platform/win32/Kernel32” and “org/openqa/selenium/os/Kernel32” while running through maven/selenium

Categories

HOME
java
deployment
keycloak
magnific-popup
activiti
lodash
youtube-dl
cmd
jsrender
sqlite3
ebean
blueprintjs
portia
webrequest
export-to-csv
quickbooks
google-cloud-spanner
jplayer
orchardcms
pythonanywhere
oracle-coherence
cx-freeze
graphicsmagick
autosys
sqlcipher
smb
numerical-methods
javacv
opentype
saas
wtx
libuv
quote
functor
data-manipulation
pdb
karaf
form-data
amazon-kinesis-kpl
mapdb
overlap
swisscomdev
libraries
ws-security
fedex
dynamic-reports
reportingservices-2005
jvm-languages
midl
websphere-mq-fte
btrace
apple-news
auto-update
google-datalayer
parentheses
komodoedit
zip4j
lowpass-filter
sqlclient
cudafy.net
gcsfuse
imanage
google-cdn
setuptools
android-fonts
heidisql
url-masking
nsviewcontroller
blackberry-10
testng-dataprovider
wordml
browser-bugs
event-bubbling
appfabric-cache
sailfish-os
sankey-diagram
ami
web-controls
dereference
device-orientation
directoryservices
sorl-thumbnail
qpainter
client-side-templating
xceed-datagrid
undefined-reference
jboss-weld
didselectrowatindexpath
cloud-connect
spring-io
pushbackinputstream
spring-validator
ember-app-kit
smtp-auth
delphi-6
anonymous-methods
broken-links
runas
doh

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