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

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

كيف يعثر Elide على مصادر المشروع وموارده: بنية src الاصطلاحية، والتصريح بمجموعات المصادر في elide.pkl، والأسبقية، و classpath لكل مجموعة.

في هذه الصفحة

مجموعة المصادر مجموعة مسمّاة من المصادر والموارد. يشتق Elide من كل مجموعة مهام التصريف والاختبار والتحزيم.

البنية الاصطلاحية

توجد main في src/main، و test في src/test، وأي مجموعة أخرى في src/<name>:

المسارالمعنى
src/<set>/java، /kotlin، /js، /ts، /pythonالمصادر، مجلد لكل لغة
src/<set>/resourcesالموارد
  • يُصرَّف كل مجلد لغة موجود. إن لم يوجد أي منها، فإن src/<set> نفسه هو جذر المصادر.
  • يُستخدم src بوصفه src/main، و test أو tests بوصفه src/test.
  • توجد main و test متى وُجدت مجلداتهما. يجب التصريح بالمجموعات الأخرى.

لا تحتاج هذه البنية إلى كتلة sources:

src/main/kotlin/sample/Main.kt
src/main/resources/app.properties
src/test/kotlin/sample/MainTest.kt

يطبع elide project info المجموعات المحلولة؛ ويميّز (by convention) المسارات الآتية من البنية الاصطلاحية.

التصريح بمجموعات المصادر

sources {
  // A glob moves only the sources.
  ["main"] = "lib/**/*.kt"

  // A block sets more properties.
  ["integrationTest"] {
    type = "test"
    paths { "it/**/*.kt" }
  }
}

الصيغة new Sources.SourceSetSpec { … } (مع import "elide:Sources.pkl" as Sources) هي الصيغة الطويلة للمُدخل. المسارات أنماط glob أو مجلدات نسبةً إلى المشروع؛ ويُجتاز المجلد تعاوديًا.

الأسبقية

كل خاصية مصرَّح بها تستبدل الاصطلاح لتلك الخاصية وحدها.

الخاصيةعند حذفهاعند التصريح بها
typeتُستنتج من الاسمتُستخدم دائمًا
pathsالبنية الاصطلاحية لهذا الاسمتُستخدم كما هي
resourcessrc/<name>/resources إن وُجدتُستخدم كما هي
dependsOnترى مجموعات الاختبار والأمثلة mainتُستخدم كما هي؛ القيمة الفارغة تعني لا شيء
typeيُستنتج منالسلوك
testtest، testsيشغّلها elide test؛ وتحلّ testPackages.
exampleexample، examplesمجموعة إنتاج.
sourceأي اسم آخرمجموعة إنتاج.
other—مجموعة إنتاج.

المُخرَجات التي لا تسمّي مصادر تحزّم كل مجموعات الإنتاج. والمجموعة المصرَّح بها التي تغطي مساراتها src/main أو src/test تستبدل تلك المجموعة الاصطلاحية، فلا يُصرَّف أي ملف مرتين.

التبعيات و classpath

تحلّ مجموعات الإنتاج packages و modules و compileOnly و runtimeOnly و processors. وتضيف مجموعات الاختبار testPackages والمجموعات التي تعتمد عليها. مجموعة الاختبار ذات dependsOn {} تُصرَّف وتعمل دون أصناف main وموارده، لكنها تظل تحلّ packages. راجع التبعيات.

elide classpath                 # main:compile
elide classpath runtime         # main:runtime
elide classpath test:runtime    # [<source-set>:]<usage>

يحلّ elide classpath قيمة classpath ويطبعها في سطر واحد، مع فصل المُدخلات بالرمز :. الاستخدامات: compile، runtime، processor، modules، toolchain، provided؛ وأي قيمة أخرى تنتهي برمز الخروج 2. يكتب التثبيت أيضًا .dev/dependencies/m2/{compile,runtime,test,processors}.classpath.

الموارد

على JVM، تكون الموارد على classpath أثناء التشغيل والاختبارات، وتُنسخ إلى ملفات JAR.

sources {
  ["main"] {
    resources {
      "assets/banner.txt"
      new {
        from = "config/services"
        into = "META-INF"
      }
    }
  }
}

يُنسخ المسار البسيط إلى جذر المخرجات. ويُنسخ from (مجلد أو ملف) تحت into: يصبح config/services/app.Service هو META-INF/services/app.Service. القيمة الافتراضية لـ into هي الجذر.

المُخرَجات

artifacts {
  ["app"] = new Jvm.Jar {}                 // every non-test source set
  ["lib"] = new Jvm.Jar { sources { "api" } }
}

تتبع ملفات JAR الخاصة بالمصادر و Javadoc القاعدة نفسها. وتُضاف resources الخاصة بملف JAR إلى موارد مجموعاته. راجع تجميع JAR.

اللغات

يحدد امتداد الملف اللغة: .java، .kt، .js/.mjs/.cjs/.jsx، .ts/.mts/.cts/.tsx، .py. المجموعة التي تحتوي على Java و Kotlin تشغّل المُصرّفين كليهما؛ والمجموعة التي لا تحتوي على أي منهما لا تشغّل أي تصريف لـ JVM. توضع إعدادات المُصرّف لمجموعة واحدة في كتلة اللغة، مع اسم المجموعة مفتاحًا: jvm.java.sourceSets (راجع مُصرّف Java). تُحتسب سكربتات Kotlin (.kts) في المجموعة مصادرَ Kotlin، لكنها لا تُنتج أصنافًا ولا يُتحقق من أنواعها.

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