Android Studio Otter: не удается запустить fun main() в модуле Android — «SourceSet 'main' не найден»JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Android Studio Otter: не удается запустить fun main() в модуле Android — «SourceSet 'main' не найден»

Сообщение Anonymous »

После обновления Android Studio до Otter (2025.2.1 Patch 1) я больше не могу запускать простые функции Kotlin fun main() внутри моего стандартного модуля приложения Android (

Код: Выделить всё

:app). Это отлично работало в Нарвале.
Когда я запускаю этот код через значок желоба:
package com.example.sample

fun main() {
println("Hello")
}
Я получаю следующую ошибку:

Код: Выделить всё

Initialization script '...' line: 27
A problem occurred configuring project ':app'.
> Could not create task ':app:com.example.sample.HelloKt.main()'.
> SourceSet with name 'main' not found.
Скрипт, вызывающий ошибку (строка 27 показана ниже):

Код: Выделить всё

# line 27 (the failing line)
classpath = project.sourceSets[sourceSetName].runtimeClasspath
Полный контекст:

Код: Выделить всё

def gradleProjectId = 'Sample:app'
def runAppTaskName = 'com.example.sample.HelloKt.main()'
def mainClassToRun = 'com.example.sample.HelloKt'
def javaExePath = '/Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java'
def _workingDir = '/Users/XXXXX/AndroidStudioProjects/Sample'

def sourceSetName = 'main'

def isOlderThan64 = GradleVersion.current().getBaseVersion().compareTo(GradleVersion.version("6.4")) < 0

allprojects {
afterEvaluate { project ->
if (project.rootProject.name + project.path == gradleProjectId) {
def overwrite = project.tasks.findByName(runAppTaskName) != null
project.tasks.create(name: runAppTaskName, overwrite: overwrite, type: JavaExec) {
if (javaExePath) executable = javaExePath
if (project.pluginManager.hasPlugin("org.jetbrains.kotlin.multiplatform")) {
project.kotlin.targets.each { target ->
target.compilations.each { compilation ->
if (compilation.defaultSourceSetName == sourceSetName) {
classpath = compilation.output.allOutputs + compilation.runtimeDependencyFiles
}
}
}
} else {
classpath = project.sourceSets[sourceSetName].runtimeClasspath
}

if (isOlderThan64) {
main = mainClassToRun
} else {
mainClass = mainClassToRun
}

if(_workingDir) workingDir = _workingDir
standardInput = System.in
}
}
}
}
Что я заметил
  • "Бег с покрытием" работает, поэтому класс (

    Код: Выделить всё

    com.example.sample.HelloKt
    ) и путь к классам верны.
  • Похоже, что Otter генерирует временную задачу Gradle для запуска функции, и эта задача завершается сбоем, поскольку модули Android не имеют стандартного основного исходного кода JVM.
Что я пробовал (ничего не помогло)
  • Недействительные кеши, удалены .gradle и .idea
  • Сбросить все конфигурации запуска
  • Конфигурация запуска Kotlin вручную

    Основной класс: com.example.sample.HelloKt
  • Путь к классу модуля: :app

    → Сбой с: «Класс ... не найден в модуле ...»
[*]Добавление id("application") в app/build.gradle.kts

→ Сбой из-за плагина Android vs Конфликт плагинов Java


Вопрос
Есть ли способ (настройка IDE или обходной путь Gradle) заставить Android Studio Otter запускать эту забавную функцию main() как простое приложение Kotlin/JVM без создания сбойной временной задачи Gradle?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ceset-main
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»