الملف 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.. | 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 |
كل وجهة:
| الخاصية | المعنى | الافتراضي |
|---|---|---|
provider | otlp أو sentry أو datadog أو posthog أو honeycomb أو grafana. | otlp |
endpoint | الرابط الأساسي؛ يحل محل مضيف المزوّد. ويُلحق به /v1/<signal> في HTTP. | http://localhost:4318 (4317 في gRPC) |
protocol | grpc أو http/protobuf أو http/json. | http/protobuf |
headers, headerEnv | ترويسات حرفية، وترويسات تُقرأ من متغيرات مسمّاة. | — |
credential | المتغير الذي يحمل مفتاح المزوّد: DD_API_KEY و POSTHOG_PROJECT_TOKEN و HONEYCOMB_API_KEY و GRAFANA_. | كما هو مذكور |
dsn | المتغير الذي يحمل DSN الخاص بـ Sentry. | SENTRY_DSN |
site | موقع Datadog: us1 أو us3 أو us5 أو eu أو ap1 أو ap2 أو gov، أو اسم نطاق. | DD_SITE، ثم us1 |
region | us/eu (PostHog و Honeycomb)، أو منطقة Grafana Cloud مثل prod-us-east-0. | us |
signals | traces و 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" } }
}| الكتلة | الخصائص |
|---|---|
maven | packages, devPackages, modules, compileOnly, runtimeOnly, processors, testPackages, kotlinPlugins, exclusions, substitutions, repositories, enableDefaultRepositories, localRepository |
npm | packages, devPackages |
pypi | packages و optionalPackages (مجموعات مسمّاة)؛ ولا يثبّتها elide install. |
spring | version و starter و testStarter؛ وتتوسع إلى maven. |
| القيمة | الشكل |
|---|---|
| إدخال Maven | "group:artifact:version[:classifier]"، أو MavenPackageSpec (group و name و version و classifier أو coordinate)، أو مسار JAR محلي، أو مرجع مشروع. |
| المستودع | رابط، أو مواصفة تحوي url و name و description و credentials (username و password و ntlmDomain و ntlmWorkstation). |
مفتاح substitutions | group: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". |
compilerOptions | optIn, progressiveMode, extraWarnings, allWarningsAsErrors, suppressWarnings, verbose, freeCompilerArgs, apiVersion, languageVersion, includeRuntime, noStdlib, javaParameters, jvmTarget, noJdk, jvmTargetValidationMode, incremental |
features | testing, kotlinx, defaultPlugins, serialization, coroutines, atomicfu, powerAssert, metro, reflection |
toolchain | "embedded" أو new Kotlin. أو new Kotlin.. |
plugins | خيارات لكل معرّف إضافة مُصرّف، تُمرَّر بالشكل -P plugin:<id>:<key>=. |
القيم الافتراضية: مُصرّف 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, JvmApplication | elide:Jvm.pkl | تجميع JAR |
NativeImage | elide:NativeImage.pkl | Native Image |
WebImage | elide:NativeImage.pkl | WebImage |
ContainerImage | elide:Container.pkl | حاويات JVM |
StaticSite | elide: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 | المعنى | الافتراضي |
|---|---|---|
publishingType | USER_MANAGED: أصدِر عملية النشر التي جرى التحقق منها في Portal بنفسك. AUTOMATIC: تُصدَر بعد التحقق. | USER_MANAGED |
url | الـ Portal الذي يُرفع إليه. | https:/ |
قبل البناء، يتحقق 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 | صيغ التقارير لكل مشغّلات الاختبار، وتُكتب في .؛ وهي مثل --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()، وتُكتب في .. | لا شيء |
coverage.jvm.excludes | أنماط أسماء الأصناف (* و ?) التي لا تُرصد، مثل الشيفرة المولَّدة. | لا شيء |
coverage.js.paths | جذور مصادر JavaScript و TypeScript المشمولة في التقرير، بصيغة LCOV في .. والقائمة الفارغة تشمل المشروع كله. | لا شيء |
راجع الاختبار › التغطية.
مساحات العمل
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"). | اختيار ملف JAR واحد حين يعلن المشروع عدة ملفات. |
project("core"). | رؤية تصريحات Kotlin internal في core أيضًا، دون تصريحات تبعياته. فقط في packages و modules و compileOnly و testPackages. |
new Jvm. | فك ملف JAR الخاص بـ core داخل هذا الملف بعد بنائه أولًا؛ ولا حاجة إلى تبعية. |
module.project("core") | استخدمه في مكانه داخل جسم كائن؛ إذ لا يُحَل project(…) المجرد هناك. |
new Artifacts. | الصيغة الصريحة؛ import "elide:Artifacts.. |
يفشل المرجع إلى مشروع بلا ملف JAR، أو استدعاء friend() في غير موضعه، عند تهيئة البناء.