Перейти к содержимому

Компилятор 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 в режиме 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

Была ли эта страница полезной?