Ошибка при попытке создать экземпляр класса Kotlin из Java

Я пытаюсь создать экземпляр класса Kotlin с Java, но каждый раз, когда я пытаюсь скомпилировать Maven, я получаю ошибку, 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 } } 

Не уверен, почему это не форматировалось правильно, но так или иначе, прежде чем я преобразовал его в класс Kotlin, он работал, но мне нужно зарегистрировать эту команду в моем основном классе, который является классом Java. Когда я пытаюсь создать экземпляр класса Kotlin из класса Java, в среде IDE нет ошибок, но когда я собираюсь скомпилировать его, крики maven

 cannot find symbol [ERROR] symbol: class ConfigCommand 

Я все еще выясняю Котлина, но я попытался выполнить несколько перестановок на основе вашего примера. Я легко мог создать вашу проблему на основе вашего Hastebin pom.

Вы были правы, что изменение <phase> to process-sources получило мой тестовый код для компиляции в Maven, но я (честно говоря) не всегда помню все фазы Maven с головы, так что лично мне не было бы удобно с переходом на источники процесса без дополнительных исследований – тем более, что инструментальная система IntelliJ опирается на фазу compile .

После игры с моими примерами взаимодействия, кажется, что критический (и отсутствующий по умолчанию по умолчанию инструмент) является элементом <sourceDirectory> как дочерний элемент верхнего уровня <build> как в:

 <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> 

Добавление <sourceDirectory> в качестве элемента верхнего уровня в <build> сделало мою компиляцию кода Java Java в Kotlin, когда я запустил команду терминала mvn compile . Это было верно, когда я смешал исходные файлы в каталоге «java», чтобы содержать файлы Java и Kotlin.

В качестве побочного примечания (и я не понимаю, почему, когда я пишу это), когда я добавил «Kotlin» как часть моего имени класса в свой источник Kotlin, мне не нужно было добавлять элемент <sourceDirectory>

Пройдя через эту страницу несколько раз и осознав, что я не сделал ничего плохого, я начал просто возиться с моим помпедом и в конечном итоге заставил его работать, изменив фазу компиляции Котлина на process-sources

maven-compiler-plugin добавляет стандартные исполнения по default-compile и default-testCompile которые запускаются сначала в соответствующих фазах.

Чтобы использовать классы Kotlin в Java-коде, вам нужно запустить компилятор Kotlin до запуска компилятора Java. Один из способов сделать это – запланировать его выполнение на этапе process-sources . Другой подход заключается в «нечеловеческом» выполнении по умолчанию плагинов Java и планировании новых исполнений вместо выполнения плагина Kotlin.

Исполнения по умолчанию для Java-плагина отключены с помощью этого раздела 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> по  <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> по  <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> 

И затем добавляются новые исполнения:

  <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> 

Полный пример показан здесь: https://kotlinlang.org/docs/reference/using-maven.html#compiling-kotlin-and-java-sources