Перейти до вмісту

Компілятор Java

Компілюйте вихідний код на Java 25 за допомогою elide javac або під час збирання проєкту Elide без встановлення JDK; параметри Elide для виводу в JAR і обмеження кількості помилок.

На цій сторінці

Elide містить javac для Java 25; окремий JDK не потрібен.

Компіляція вихідних файлів

elide javac -- -d out src/Hello.java
elide java -- -cp out Hello
0:12 / 0:12

Параметри javac вказуються після --. Без -d файли класів записуються поруч із вихідними файлами. elide javac -- -help виводить усі параметри javac.

Параметри Elide

Параметри Elide вказуються перед --:

ПараметрПризначення
--jar PATHЗапакувати результат у JAR за шляхом PATH.
--manifest FILEМаніфест для результату --jar.
--max-errors NСкільки помилок показати, перш ніж решту буде лише підраховано; 0 показує всі. Попередження дедуплікуються й ніколи не обмежуються.
--report-used-deps PATHЗаписати елементи classpath, на які посилається результат (strict deps у Bazel).
--capabilitiesВивести можливості компілятора у форматі JSON.
--persistent_workerПрацювати як постійний воркер Bazel (persistent worker) у режимі singleplex або multiplex.
--classpath-cacheЛише для воркера: повторно використовувати стан classpath між компіляціями. ELIDE_WORKER_CLASSPATH_CACHE=0 вимикає це.
elide javac --jar target/app.jar -- src/Main.java src/Util.java
elide javac --jar target/app.jar --manifest src/MANIFEST.MF -- src/Main.java

Збирання проєктів

elide build компілює src/main/java і src/test/java або набори вихідних файлів, оголошені в elide.pkl. Щоб скомпілювати лише main:

elide build compile-java-main
jvm {
  target = 25
  java {
    release = 25
    compiler {
      mode = "embedded"
      flags { "-Xlint:all" }
    }
  }
  features {
    graalvm = false
  }
}
ВластивістьПризначенняЗа замовчуванням
jvm.targetЦільова версія байт-коду; рівень --release, якщо java.release не задано."auto" (21)
jvm.java.releaseРівень --release: компілювати лише з API цього JDK."auto"
jvm.java.sourceВикористовувати --source/--target замість --release; ігнорується, якщо задано release."auto"
jvm.java.compiler.mode"embedded" використовує javac з Elide; "external" запускає javac з jvm.javaHome."embedded"
jvm.java.compiler.flagsДодаткові прапорці javac; --release, -source або -target тут замінюють прапорці Elide.немає
jvm.java.sourceSets["<set>"].releaseРівень --release лише для цього набору вихідних файлів."auto" (як у проєкту)
jvm.java.sourceSets["<set>"].flagsПрапорці javac для цього набору вихідних файлів, після compiler.flags.немає
jvm.javaHomeJava home для зовнішньої компіляції та JVM в окремих процесах.власний в Elide
jvm.debugКомпілювати з -g.true
jvm.features.graalvmДодати org.graalvm.nativeimage, word і collections до classpath компіляції.false
jvm.features.automodulesРозміщувати JAR без дескриптора модуля в module path як автоматичні модулі.true

Набір вихідних файлів, якому потрібні інші налаштування (наприклад, компіляція лише з java.base), задає їх у sourceSets. Якщо вказати набір вихідних файлів, якого немає в проєкті, збирання завершиться помилкою.

sources {
  ["desktopless"] { paths { "src/desktopless/java" } }
}
jvm {
  java {
    sourceSets {
      ["desktopless"] {
        flags { "--limit-modules"; "java.base" }
      }
    }
  }
}

Кожна компіляція записує свої аргументи в javac.args поруч із результатом. Процесори анотацій: Залежності Maven.

Постійні воркери Bazel

elide javac --persistent_worker і elide kotlinc --persistent_worker тримають один компілятор запущеним між діями Bazel. Правила, налаштування й готовий приклад: Bazel.

Приклади

Почніть із шаблону:

elide init --template java        # Java app with a JUnit test

Чи була ця сторінка корисною?