انتقل إلى المحتوى

مرجع elide.pkl

كل كتل ملف بيان المشروع elide.pkl في Elide وحقوله: البيانات الوصفية والمصادر والتبعيات و JVM و Kotlin و JavaScript والمُخرَجات والاختبار ومساحات العمل.

في هذه الصفحة

الملف elide.pkl هو ملف بيان المشروع: تُعلَن فيه عمليات البناء والتبعيات والاختبارات والمُخرَجات. يبدأ كل ملف بما يلي:

amends "elide:project.pkl"

تشير البادئة elide: إلى المخطط المضمّن في Elide قيد التشغيل، في هذه الوحدة وفي كل وحدة أخرى (elide:Jvm.pkl). لتحديد إصدار المخطط، وسّع الرابط المنشور بدلًا منها: pkl.elide.dev/1.6.0/project.pkl.

يتبع الإصدار قيد التطوير الفرع main حتى صدوره المستقر. إصدارات المخطط المنشورة لا تتغير.

لا تضيف إصدارات التصحيح ضمن الخط MAJOR.MINOR إلا خصائص جديدة. أما الإصدار الثانوي فقد يزيل الخصائص أو يعيد تسميتها أو يغيّر أنواعها، وقد يغيّر القيم الافتراضية.

الإصدار المحددالنتيجة
أقدم من Elide قيد التشغيليُستخدم ذلك الإصدار؛ وتفشل الخاصية المحذوفة بعده مع ذكر الإصدار.
أحدث من Elide قيد التشغيلمسموح؛ وتفشل الخاصية التي لا يعرفها Elide قيد التشغيل مع ذكر الترقية المطلوبة.
إصدار رئيسي آخرمرفوض.

يطبع الأمر elide project export ملف البيان بعد تقييمه بصيغة JSON، ويسرد elide build --inspect مهامه.

البيانات الوصفية للمشروع

الخاصيةالغرض
name, version, descriptionهوية المشروع؛ ويدخل version أيضًا في أسماء أرشيفات التطبيقات.
entrypointالملف أو الملفات التي يستخدمها elide run حين لا يُمرَّر له شيء.
scriptsأوامر shell مسمّاة يشغّلها elide run NAME.
sourcesمجموعات المصادر؛ راجع المصادر.
dependenciesحزم Maven و npm و PyPI؛ راجع التبعيات.
jvm, kotlin, javascriptإعدادات اللغات والمُصرّفات.
nativeImageمقبول ولا يُطبَّق؛ اضبط options لكل مُخرَج.
engineسياقات خدمة الطلبات؛ راجع سياقات المحرك.
toolchainإصدارات Elide المقبولة؛ راجع سلسلة الأدوات.
devمعلومات المصدر و MCP وخادم التطوير؛ راجع التطوير.
webإعدادات أصول الويب؛ راجع الويب.
artifactsمُخرَجات البناء؛ راجع المُخرَجات.
testingتقارير الاختبارات؛ راجع الاختبار.
coverageالتغطية؛ راجع الاختبار › التغطية.
workspaceالمشاريع الأعضاء؛ راجع مساحات العمل.

تحمل الخاصية build.flags قيم -f/--flag؛ راجع خيارات البناء.

سياقات المحرك

engine {
  topology = "prespawn"
  contexts { spawn = "auto"; reserve = 2; min = 1; max = 16 }
}
الخاصيةالمعنىالافتراضي
topology"prespawn"، وهي القيمة الوحيدة."prespawn"
contexts.spawnعدد السياقات: عدد صحيح موجب، أو "auto" (الأنوية الفعلية ناقص reserve، ضمن الحدود).1
contexts.reserveالأنوية المطروحة في حالة "auto"؛ ولا يربط السياقات بمعالجات بعينها.2
contexts.min, contexts.maxحدود أي عدد.1، بلا حد
maxContextsعدد ثابت مهمل؛ لا يُجمع مع contexts.—

يقيّم كل سياق وحدة الدخول مرة واحدة، بكائناته العامة الخاصة به، قبل أن يصبح الخادم جاهزًا. يتجاوز الخيار --contexts=N|auto في run و serve و dev قيمة spawn. ويتطلب أكثر من سياق واحد نظام Linux.

كتلة OpenTelemetry

opentelemetry {
  service { name = "checkout"; version = "1.4.2"; environment = "production" }
  resource { ["cloud.region"] = "us-east-1" }

  destinations {
    ["collector"] { endpoint = "http://localhost:4317"; protocol = "grpc" }
    ["datadog"] { provider = "datadog"; site = "us5" }
    ["sentry"] { provider = "sentry" }
  }

  traces { sampler = "parentbased_traceidratio"; ratio = 0.25 }
  metrics { interval = 30.s }
  logs { level = "info" }
  runtime { logs = "warn" }
}

يبقى القياس عن بُعد معطّلًا حتى تُعرَّف وجهة هنا، أو في متغيرات OTEL_*/ELIDE_OTEL_*، أو في خيارات --otel-*. وتتجاوز هذه كلها الكتلة، والأولوية للخيارات؛ راجع متغيرات بيئة التشغيل. تقرأ الأوامر elide run و elide serve و elide test و elide build و elide install هذه الكتلة داخل المشروع، ويقرؤها elide run file.js داخل المشروع إذا احتوى elide.pkl على الكلمة opentelemetry. راجع التهيئة. لا تُكتب بيانات الاعتماد هنا أبدًا: سمِّ متغير البيئة الذي يحملها.

الخاصيةالمعنىالافتراضي
enabledالقيمة false تعطّل القياس عن بُعد مهما كانت البيئة.—
service.name, .version, .namespace, .environmentسمات المورد service.* و deployment.environment.name.unknown_service:elide
resourceسمات مورد إضافية.—
destinationsأماكن مسمّاة يُرسل إليها القياس عن بُعد.لا شيء
traces.enabled, .sampler, .ratio, .propagatorsنطاقات تتبع (span) التطبيق. أدوات أخذ العينات كما في OTEL_TRACES_SAMPLER.مفعّل، parentbased_always_on، tracecontext + baggage
metrics.enabled, .interval, .temporalityمقاييس التطبيق.مفعّل، 60.s، cumulative
logs.enabled, .level, .consoleسجلات التطبيق؛ يصدّر console ما تطبعه console.* و logging في Python وما يشبههما.مفعّل، info، مفعّل
profiles.enabled, .frequencyملفات تعريف أداء المعالج للشيفرة الضيفة (تجريبي).معطّل، 100 في الثانية
runtime.traces, .metrics, .logsنطاقات التتبع والمقاييس الخاصة بـ Elide وحدّ سجلاته.مفعّل، مفعّل، warn
propagation.baggageترويسة W3C baggage في خادم HTTP وعملاء Elide؛ راجع Baggage.معطّل
shutdownTimeoutمهلة التصدير الأخير عند الخروج.5.s

كل وجهة:

الخاصيةالمعنىالافتراضي
providerotlp أو sentry أو datadog أو posthog أو honeycomb أو grafana.otlp
endpointالرابط الأساسي؛ يحل محل مضيف المزوّد. ويُلحق به /v1/<signal> في HTTP.http://localhost:4318 (4317 في gRPC)
protocolgrpc أو http/protobuf أو http/json.http/protobuf
headers, headerEnvترويسات حرفية، وترويسات تُقرأ من متغيرات مسمّاة.—
credentialالمتغير الذي يحمل مفتاح المزوّد: DD_API_KEY و POSTHOG_PROJECT_TOKEN و HONEYCOMB_API_KEY و GRAFANA_CLOUD_OTLP_CREDENTIAL.كما هو مذكور
dsnالمتغير الذي يحمل DSN الخاص بـ Sentry.SENTRY_DSN
siteموقع ⁦Datadog:⁩ us1 أو us3 أو us5 أو eu أو ap1 أو ap2 أو gov، أو اسم نطاق.DD_SITE، ثم us1
regionus/eu (PostHog و Honeycomb)، أو منطقة Grafana Cloud مثل prod-us-east-0.us
signalstraces و metrics و logs و profiles.ما يقبله المزوّد
compression, timeoutضغط الطلب ومهلته.gzip، 10.s
perSignalقيم endpoint و protocol و headers و headerEnv و compression و timeout لكل إشارة على حدة.—
المزوّدالإشارات المرسلة افتراضيًامقبولة أيضًاالبروتوكولات
otlpالتتبعات، المقاييس، السجلاتملفات تعريف الأداءالكل
sentryالتتبعات، السجلات—http/protobuf
datadogالمقاييس (delta)، السجلاتالتتبعات (معاينة agentless intake)http/protobuf؛ و http/json إلا للسجلات
posthogالسجلاتالتتبعاتhttp/protobuf
honeycombالتتبعات، المقاييس، السجلات—الكل
grafanaالتتبعات، المقاييس، السجلات—http/protobuf

تُرسل الأخطاء سجلاتٍ من نوع exception وأحداثًا في نطاقات التتبع، إضافة إلى المقياس elide.errors، فيستقبلها كل مزوّد يقبل السجلات أو التتبعات أو المقاييس. راجع نظرة عامة على OpenTelemetry للاستخدام، و المزوّدون لتفاصيل كل مزوّد. وطلب إشارة أو بروتوكول لا يقبله المزوّد خطأ.

Baggage

يمرّر خادم HTTP وعملاء Elide الترويستين traceparent و tracestate. أما ترويسة W3C baggage فلا يمرّرونها إلا إذا فعّلت اتجاهًا لها، لأن الـ baggage القادمة من العميل مدخلات غير موثوقة:

opentelemetry {
  propagation {
    baggage {
      inbound = true
      outbound = true
      allow { "tenant"; "region" }
      spanAttributes { "tenant" }
    }
  }
}
الخاصيةالمعنىالافتراضي
inboundتصبح ترويسات baggage في الطلبات المخدومة هي baggage المعالج.false
outboundتحمل طلبات fetch وطلبات عميل HTTP الصادرة الـ baggage الحالية، ما لم يضبط الطلب baggage بنفسه.false
allowالمفاتيح المسموح بها في الاتجاهين.كل المفاتيح
spanAttributesمفاتيح واردة تُسجَّل على نطاق تتبع الخادم بالشكل baggage.<key>؛ ويجب أن يرد كل منها في allow.لا شيء

تُسقط الترويسة كاملةً إذا تجاوزت 8,192 بايت أو 180 عضوًا، أو احتوت على عضو تالف. ولا تصل الـ baggage المستلمة من عميل إلى الطلبات الصادرة إلا إذا فُعّل الاتجاهان. ويمكن لشيفرة التطبيق دائمًا قراءة الـ baggage وضبطها وإرسالها عبر واجهة OpenTelemetry البرمجية؛ ولا يؤثر OTEL_PROPAGATORS إلا في تلك الواجهة.

المصادر

sources {
  ["main"] = "lib/**/*.kt"
  ["integrationTest"] {
    type = "test"
    dependsOn { "main" }
    paths { "it/**/*.kt" }
    resources { "it/fixtures"; new { from = "it/config"; into = "META-INF" } }
  }
}
الخاصيةالمعنىعند الفراغ أو الغياب
type"source" أو "test" أو "example" أو "other".يُستنتج من الاسم.
pathsأنماط glob أو مجلدات.src/<name>/<language>.
resourcesمسارات، أو جذور new { from; into }.src/<name>/resources.
dependsOnمجموعات المصادر المرئية لهذه المجموعة.عند الغياب: ترى مجموعات الاختبار والأمثلة main. عند الفراغ: لا شيء.

راجع مجموعات المصادر.

التبعيات

dependencies {
  maven {
    packages { "com.google.guava:guava:33.5.0-jre" }
    testPackages { "org.junit.jupiter:junit-jupiter:5.13.4" }
    substitutions { ["com.google.guava:guava"] = "libs/guava-patched.jar" }
  }
  npm { packages { "react@19.0.0" }; devPackages { "typescript@5.6.2" } }
  pypi { packages { "requests>=2" }; optionalPackages { ["dev"] { "pytest>=8" } } }
  spring { version = "4.0.0"; starter { "web" }; testStarter { "test" } }
}
الكتلةالخصائص
mavenpackages, devPackages, modules, compileOnly, runtimeOnly, processors, testPackages, kotlinPlugins, exclusions, substitutions, repositories, enableDefaultRepositories, localRepository
npmpackages, devPackages
pypipackages و optionalPackages (مجموعات مسمّاة)؛ ولا يثبّتها elide install.
springversion و starter و testStarter؛ وتتوسع إلى maven.
القيمةالشكل
إدخال Maven"group:artifact:version[:classifier]"، أو MavenPackageSpec (group و name و version و classifier أو coordinate)، أو مسار JAR محلي، أو مرجع مشروع.
المستودعرابط، أو مواصفة تحوي url و name و description و credentials (username و password و ntlmDomain و ntlmWorkstation).
مفتاح substitutionsgroup:artifact (أي إصدار) أو group:artifact:version؛ والقيمة مسار ملف.

يحتفظ الاستبدال بالتبعيات المتعدية للإحداثية ويضع الملف مكانها في كل classpath. تُحَل المسارات نسبةً إلى ملف البيان الذي يعلنها، ويرث الأعضاء استبدالات الجذر. رتّب المهمة التي تولّد الملف لتُنفَّذ أولًا. الفئات والمستودعات: التبعيات.

JVM

jvm {
  main = "example.Main"
  target = 25
  flags { "--add-opens=java.base/java.lang=ALL-UNNAMED" }
  defs { ["app.env"] = "dev" }
  java { release = 25; compiler { flags { "-Xlint:all" } } }
}
الخاصيةالمعنىالافتراضي
mainصنف نقطة الدخول لـ elide run وملفات JAR والتطبيقات والصور الأصلية.—
targetهدف الشيفرة الثنائية (bytecode): 8 … 29 أو 1.8 أو "latest" أو "stable" أو "auto"."auto" (21)
javaHomeمجلد Java لعمليات التصريف الخارجية ولآلات JVM التي تعمل في عمليات منفصلة.المضمّن في Elide
preferBaliتشغّل عمليات JVM الخارجية bali من PATH بدلًا من java، أو تعرض تحذيرًا وتستخدم java.false
features.testingتبعيات JUnit في مجموعات الاختبار.true
features.automodulesوحدات تلقائية لملفات JAR التي لا واصف لها.true
features.graalvmواجهات SDK org.graalvm على classpath التصريف.false
java.source, java.releaseمستويا المصدر و --release؛ راجع مُصرّف Java."auto"
java.compiler.mode"embedded" أو "external"."embedded"
java.compiler.flagsخيارات javac إضافية.لا شيء
java.sourceSetsقيم release و flags لكل مجموعة مصادر؛ راجع مُصرّف Java.لا شيء
flagsخيارات JVM لـ elide run وآلة JVM الخاصة بالاختبارات وسكربتات التشغيل.لا شيء
defsخصائص النظام (-D)، وتُطبَّق حيثما تُطبَّق flags.لا شيء
debugالتصريف مع -g.true

Kotlin

kotlin {
  apiLevel = "auto"
  languageLevel = "auto"
  compilerOptions { allWarningsAsErrors = true; optIn { "kotlin.time.ExperimentalTime" } }
  features { serialization = true; metro = false }
  toolchain = "embedded"
  plugins { ["org.jetbrains.kotlinx.serialization"] { ["mode"] = "json" } }
}
الخاصيةالمعنى
apiLevel, languageLevel"auto" أو "latest" أو "stable" أو "1.9" … "2.5".
compilerOptionsoptIn, progressiveMode, extraWarnings, allWarningsAsErrors, suppressWarnings, verbose, freeCompilerArgs, apiVersion, languageVersion, includeRuntime, noStdlib, javaParameters, jvmTarget, noJdk, jvmTargetValidationMode, incremental
featurestesting, kotlinx, defaultPlugins, serialization, coroutines, atomicfu, powerAssert, metro, reflection
toolchain"embedded" أو new Kotlin.ManagedKotlinToolchain { version } أو new Kotlin.CustomKotlinToolchain { path }.
pluginsخيارات لكل معرّف إضافة مُصرّف، تُمرَّر بالشكل -P plugin:<id>:<key>=<value>.

القيم الافتراضية: مُصرّف Kotlin.

JavaScript

الخاصيةالمعنىالافتراضي
javascript.ecmaإصدار ECMAScript المُعلَن: سنة من 2015 … 2025، أو "stable" أو "latest". يعرضه elide project info، ولا يغيّر الصياغة التي تُنفَّذ ولا طريقة بناء الشيفرة (لغة JavaScript)."stable"

سلسلة الأدوات

toolchain { engines { ["elide"] = ">=1.6.0" } }
الخاصيةالمعنى
engines["elide"]إصدار أو نطاق semver، أو new { version = "…" }؛ ويفشل التحقق إذا كان Elide قيد التشغيل خارجه.
engines[<other>]مقبول، ولا يُفرض.

التطوير

dev {
  source { platform = "github"; project = "example/app" }
  mcp {
    registerElide = true
    advice = true
    resources { new { path = "docs/ARCHITECTURE.md"; name = "architecture" } }
  }
}
الخاصيةالمعنىالافتراضي
source.platform, source.project, source.subpathمستضيف المصدر: "github" أو "gitlab" أو "bitbucket" أو "git" أو اسم آخر.—
mcp.registerElideتسجيل Elide أداةً في MCP.true
mcp.adviceإتاحة elide project advice موردًا في MCP.true
mcp.resourcesموارد MCP إضافية: path و name و description و mimeType (يُكتشف إذا أُغفل).لا شيء
server.host, server.portلا يستخدمهما elide dev، الذي يأخذ --host/--port (الافتراضي 127.0.0.1:3000)."0.0.0.0"، 8080

الويب

الخاصيةالمعنىالافتراضي
web.css.minifyتصغير CSS المبني.true
web.css.targetsالمتصفحات المستهدفة: new { browser = "chrome"; version = "120" }.لا شيء
web.minifyHtmlتصغير HTML المُصيَّر.true
web.browsersالمتصفحات المستهدفة لكل المخرجات؛ وتتجاوزها css.targets في CSS.لا شيء

راجع سلسلة أدوات الويب.

المُخرَجات

import "elide:Jvm.pkl" as Jvm

artifacts {
  ["app"] = new Jvm.Jar {
    name = "app.jar"
    options { entrypoint = "example.Main" }
    sources { "main" }  // optional; empty packages every non-test source set
  }
}

يحدد المفتاح اسم مهمة البناء. وتُكتب المخرجات تحت .dev/artifacts/<kind>/.

النوعالوحدةالحقول
Jar, SourceJar, JavadocJar, JvmApplicationelide:Jvm.pklتجميع JAR
NativeImageelide:NativeImage.pklNative Image
WebImageelide:NativeImage.pklWebImage
ContainerImageelide:Container.pklحاويات JVM
StaticSiteelide:Web.pklالمواقع الثابتة
حقل مشتركالمعنى
dependsOnأسماء المُخرَجات التي تُبنى أولًا.
name (ملفات JAR)كل من "app" و "app.jar" يعطي app.jar؛ ويعطي SourceJar الملف app-sources.jar.

WebImage

يأخذ WebImage حقول NativeImage وهي from و name و entrypoint و moduleName و dependsOn و options، ولا يملك type، ويضيف:

الخاصيةالقيمالافتراضي
backend"wasm-gc" (جامع مهملات المضيف) أو "wasm-lm" (ذاكرة خطية)."wasm-gc"
runtime"generic" أو "browser" أو "node"."generic"
autoRunتشغيل البرنامج عند تحميل المُحمِّل.true
sourceMapإصدار خريطة مصدر JavaScript.false

الحقل entrypoint (أو jvm.main) مطلوب حتى مع autoRun = false. لا تمرّر خيارات خام لهذه الإعدادات الأربعة. الدليل: WebImage؛ والمُخرَجات المبنية بالخيارات: الترحيل.

النشر

publishing {
  maven {
    groupId = "dev.example"
    artifactId = "example"                 // default: the project name
    localRepository = "~/.m2/repository"   // the default
    artifacts { "lib"; "lib-sources" }      // default: every Jar, SourceJar and JavadocJar
    pom {
      name = "Example"
      description = "An example library."  // default: the project description
      url = "https://example.dev"
      licenses { new { name = "Apache-2.0"; url = "https://www.apache.org/licenses/LICENSE-2.0" } }
      developers { new { id = "jdoe"; name = "J. Doe" } }
      scm { url = "https://github.com/example/example" }
    }
    repositories {
      ["internal"] = "https://repo.example.dev/releases"  // or new Jvm.MavenRepositorySpec { url = … }
      ["central"] = new Publishing.CentralPortal {}       // Maven Central; import "elide:Publishing.pkl" as Publishing
    }
    signing { gpg { keyName = "0123ABCD" } }  // optional; omit keyName for gpg's default key
  }
}

يبني الأمر elide publish ملفات JAR المختارة ويثبّتها مع ملف POM في مستودع Maven المحلي. والإصدار هو version المشروع. يحتاج النشر إلى groupId و version وملف Jar واحد بالضبط. يُنشر SourceJar تحت classifier الخاص به (الافتراضي sources)، و JavadocJar تحت javadoc. ويُحَل localRepository النسبي نسبةً إلى ملف البيان الذي يعلنه.

ملف البيانملف POM المنشور
packages, modulesتبعيات compile
runtimeOnlyتبعيات runtime
compileOnly, devPackages, processors, kotlinPlugins, testPackagesتُحذف
exclusions بلا إصدارعنصر <exclusion> على كل تبعية
مشروع شقيقإحداثيات النشر الخاصة بذلك المشروع
مشروع شقيق في Jar.fromقيم packages و modules و runtimeOnly الخاصة به، ما لم تكن مدرجة
مسار JAR محليخطأ؛ إذ لا يستطيع المستخدمون حلّه

يسرد ملف POM أيضًا، بوصفها تبعيات compile، المكتبات التي يضعها Elide على classpath مشروع Kotlin دون إعلان، لأن المستخدمين يحتاجونها وقت التشغيل: kotlin-stdlib و kotlin-reflect بإصدار Kotlin الخاص بالمشروع، ومكتبات التشغيل التي تفعّلها kotlin.features (kotlinx-coroutines-core و kotlinx-serialization ومكتبة تشغيل Metro). تظهر هذه في ملف POM المنشور مع أن elide.pkl لا يذكرها. عطّل أيًّا منها من مصدره (kotlin.features أو kotlin.compilerOptions.noStdlib)، أو أعلنه بنفسك لتحديد إصدار مختلف. ويضيف jvm.features.graalvm حزمة GraalVM SDK بنطاق runtime.

ينشر elide publish --to <name> بدلًا من ذلك إلى مستودع من repositories، مع مجاميع اختبارية .md5 و .sha1 و .sha256 و .sha512 لكل ملف. تأتي بيانات الاعتماد من ELIDE_MAVEN_<NAME>_USERNAME و ELIDE_MAVEN_<NAME>_PASSWORD، حيث <NAME> هو اسم المستودع بأحرف كبيرة مع تحويل كل محرف ليس حرفًا ولا رقمًا إلى _ (internal → ELIDE_MAVEN_INTERNAL_USERNAME، my-repo → ELIDE_MAVEN_MY_REPO_…)، وإلا فمن credentials المستودع. ويُرفض اسمان يقابلان المتغيرات نفسها (my-repo و my_repo). وتُرفض مستودعات http:// العادية غير localhost ما لم يُمرَّر --allow-http-repositories.

عند ضبط signing، يوقّع النشر البعيد كل ملف باستخدام البرنامج gpg (<file>.asc)؛ ويوقّع signing {} بالمفتاح الافتراضي لـ gpg، ويختار signing { gpg { keyName = "…" } } مفتاحًا بعينه. لا يوقّع النشر المحلي إلا مع --sign، ويعطّل --no-sign التوقيع. يطلب gpg-agent عبارة المرور. في CI، اضبط ELIDE_GPG_PASSPHRASE وسيمرّرها Elide إلى gpg عبر loopback pinentry. لا يقرأ Elide المفتاح نفسه أبدًا.

ينشر مستودع CentralPortal إلى Maven Central عبر Central Publisher Portal. أنشئ رمز مستخدم في Portal ومرّره بوصفه ELIDE_MAVEN_<NAME>_USERNAME و ELIDE_MAVEN_<NAME>_PASSWORD. تدخل كل مشاريع التشغيل في حزمة واحدة موقّعة ذات مجاميع اختبارية وفي عملية نشر واحدة، يتحقق منها Portal ويصدرها وحدةً واحدة. ينتظر Elide حتى يتحقق Portal منها، ويفشل مع أخطاء Portal إن لم تجتز التحقق. أما --no-wait فيعود فور انتهاء الرفع.

خاصية CentralPortalالمعنىالافتراضي
publishingTypeUSER_MANAGED: أصدِر عملية النشر التي جرى التحقق منها في Portal بنفسك. AUTOMATIC: تُصدَر بعد التحقق.USER_MANAGED
urlالـ Portal الذي يُرفع إليه.https://central.sonatype.com

قبل البناء، يتحقق Elide مما يشترطه Central ويبلّغ عن كل النواقص دفعة واحدة: في pom الحقول name و description و url و licenses و developers و scm.url؛ ومُخرَج SourceJar ومُخرَج JavadocJar؛ والتوقيع (لذلك يُرفض --no-sign)؛ وإصدار ليس -SNAPSHOT.

في مساحة العمل، يرث الأعضاء كتلة publishing من الجذر باستثناء artifactId و artifacts، وتغلب إعدادات العضو نفسه حقلًا بحقل. وتُورَث المستودعات بأسمائها. والمشروع الذي لا يبني ملف JAR لا ينشر شيئًا مما يرثه.

لنشر بعض مشاريع مساحة العمل فقط، سمِّها (elide publish core util) بدلًا من تغيير كتل publishing الخاصة بها، أو مرّر --skip-existing لتخطي كل إصدار موجود مسبقًا في الوجهة؛ راجع elide publish.

الاختبار

import "elide:Testing.pkl" as Testing

testing { reports { Testing.xmlReport() } }
الخاصيةالمعنى
testing.reportsصيغ التقارير لكل مشغّلات الاختبار، وتُكتب في .dev/reports/tests/<language>/<source-set>/؛ وهي مثل --reporter=junit.

التغطية

import "elide:Coverage.pkl" as Coverage

coverage {
  enabled = true
  scope = "tests"
  jvm {
    excludes { "org.example.generated.*" }
    reports { Coverage.xmlReport(); Coverage.htmlReport() }
  }
  js { paths { "src" } }
}
الخاصيةالمعنىالافتراضي
coverage.enabledجمع التغطية دون --coverage.false
coverage.scopeالمهام التي تجمع التغطية: "tests" أو "runs" أو "all". ويغطي --coverage دائمًا المهمة التي يُمرَّر إليها."tests"
coverage.jvm.reportsصيغ تقارير ⁦JVM:⁩ Coverage.htmlReport() و xmlReport() و csvReport()، وتُكتب في .dev/reports/coverage/jvm/<task>/.لا شيء
coverage.jvm.excludesأنماط أسماء الأصناف (* و ?) التي لا تُرصد، مثل الشيفرة المولَّدة.لا شيء
coverage.js.pathsجذور مصادر JavaScript و TypeScript المشمولة في التقرير، بصيغة LCOV في .dev/reports/coverage/js/lcov.info. والقائمة الفارغة تشمل المشروع كله.لا شيء

راجع الاختبار › التغطية.

مساحات العمل

workspace { members { "core"; "app" } }

كل عضو مجلد له ملف elide.pkl خاص به، ولا يمكن أن يكون للأعضاء أعضاء. ينشئ الأمر elide init --template workspace جذرًا فيه مكتبة core وتطبيق app يعتمد عليها.

السلوكالقاعدة
نطاق البناءمن الجذر، يشمل elide build/elide test كل المشاريع؛ ومن العضو، يشمل ذلك العضو فقط.
المهام عبر المشاريعelide build core:compile-kotlin-main، أو elide build core لمهامه الافتراضية.
الحالة المشتركةالتبعيات المحلولة وحالة البناء في .dev الخاص بالجذر؛ وتبقى المخرجات في .dev الخاص بكل مشروع.
تحديد الإصداراتيمكن للعضو إغفال إصدار Maven وأخذ إصدار الجذر؛ والإصدار المتعارض خطأ.
// core/elide.pkl
import "elide:Jvm.pkl" as Jvm

dependencies {
  maven {
    packages { "com.google.guava:guava" }  // version from the root
  }
}

artifacts {
  ["jar"] = new Jvm.Jar { name = "core" }
}
// app/elide.pkl
local core = project("core")

dependencies { maven { packages { core } } }
المرجعالمعنى
project("core")مُخرَج Jvm.Jar الخاص بالمشروع و classpath التصريف الخاص به، ويُبنى عند الحاجة. ولا تكفي مصادر JVM وحدها.
project("core").artifact("fat")اختيار ملف JAR واحد حين يعلن المشروع عدة ملفات.
project("core").friend()رؤية تصريحات Kotlin internal في core أيضًا، دون تصريحات تبعياته. فقط في packages و modules و compileOnly و testPackages.
new Jvm.Jar { from { core } }فك ملف JAR الخاص بـ core داخل هذا الملف بعد بنائه أولًا؛ ولا حاجة إلى تبعية.
module.project("core")استخدمه في مكانه داخل جسم كائن؛ إذ لا يُحَل project(…) المجرد هناك.
new Artifacts.ProjectArtifact { project = "core"; artifact = "fat" }الصيغة الصريحة؛ import "elide:Artifacts.pkl" as Artifacts.

يفشل المرجع إلى مشروع بلا ملف JAR، أو استدعاء friend() في غير موضعه، عند تهيئة البناء.

هل كانت هذه الصفحة مفيدة؟