Csomagok készítése¶
Ez az útmutató a Modema/System rendszerhez szükséges projek leírók és csomagok készítését mutatja be. Ajántott a referencia kézikönyv «Projektek» részét elolvasni először.
Projekt létrehozása¶
Legyen elsőre egy nagyon egyszerű add() összeadás függvényt tartalmazó könyvtár implementálása. Kezdetnek hozzunk létre egy üres könyvtárat például SimpleProject néven.
Ahhoz, hogy a projekt megtalálható legyen, és a megfelelő betőltési információk rendelkezésre álljanak, egy manifest fájlt kell készíteni. Csak a legalapvetőbb adatokat tartalmazza. Mivel elég nehéz lenne minden projekt típusnak megfelelő részletes betöltési fájlt készíteni, inkább két részre lett bontva. Egy egyszerű manifest fájlra és egy a típushoz igazítható speciális projekt osztályra.
Manifest fájl¶
Legyen megadva például a következő alap adat:
Név: «Csomag útmutató #1»
Verzió: 0.1
Forráskód neve: add.pms
Projekt osztály neve: project.pms
Függőség: ModemaProject csomag.
Ehhez hozzuk létre a következő manifest fájlt manifest.meta.json néven:
{
"name": "Csomag útmutató #1",
"version": "0.1",
"type": "project",
"import": ["add.pms"],
"requires": ["ModemaProject"]
}
Könyvtár funkció¶
A lehető legegyszerűbb felépítés miatt az add.pms tartalma:
*namespace Tutorial;
*workspace package1;
//! Egyszerű matematikai összeadás.
/*!
\param[in] a Első érték;
\param[in] b Második érték;
\return A két bemeneti érték összege.
*/
function Data::Int32 add (Data::Int32 a, Data::Int32 b) {
return a + b;
};
Project definíció¶
A manifest típusa project, ezért kötelező egy project.pms fájlnak léteznie a főkönyvtárban. Egy projekthez egy definíció tartozhat, ezért nem szerepel a manifestben.
Kötött monolítikus felépítés helyett a projekt betöltése inkább saját nyelven lett megvalósítva, így tetszőlegesen
bővíthető a projekt típusának és összetettségének megfelelően. A részletei egy másik útmutatóban kerülnek bemutatásra.
A mostani feladathoz elegendő a ModemaProject csomagban található Modema:{main}:PackageProject
előre elkészített
osztályt használni.
Project forráskód¶
A project.pms fájl kezdő tartalma így néz ki:
*namespace Tutorial;
*workspace package1;
//! Speciális project osztály.
*project Project {
*extends Modema::Project:{main}:PackageBase;
};
Ha később szükség lenne rá, a Tutorial:{package1}:Project
néven tudunk rá hivatkozni.
Project információk¶
A projecthez tartozó információkat többféleképpen lehet megadni, akár konfigurációs fájlban is. Most az erőforrás alapú módszer lesz ismertetve, ez nehézkesebb, de univerzális megoldás. Validációs eljárásban bármit kötelezővé vagy kötött formátumuvá lehet tenni, most eltekintünk ettől. Az erőforrásokról a referencia kézikönyv «Erőforrások» része foglalkozik részletesen.
A projekt rendszercsomag több erőforrás típust tartalmaz, ezekből használunk párat. A projekt osztályon belülre kell helyezni őket. Az ilyen módon létrehozott adatok kereshetőek, akár RDF adatokká is könnyen alakíthatóak.
Licensz és copyright:
*resource Author: Modema:{main}:#ProjectAuthorResource {
name: "Egry Gábor Szilárd";
email: "egrygabor@projectmeta.hu";
years: "2023"
};
*resource License: Modema:{main}:#ProjectLicenseResource {
license: "MIT";
};
Honlap:
*resource Homepage: Modema:{main}:#UrlResource {
name: "Útmutató honlapja";
url: "https://docs.projectmeta.hu";
};
Célok¶
A célok határozzák meg mit lehet tenni egy projekttel. Itt is hangsúlyos szerepe van az előre definiált projekt típusoknak, és egyedileg testre szabható. Egy erőforrással és egy hozzá tartozó metódussal van megvalósítva. Amire szükségünk van most, az a csomag létrehozás, dokumentáció, tesztelés. Az első kettő metódusa az alap osztályban található.
Csomag létrehozása az add.pms fájl tartalmából, a csomagot SimplePackage.pmz néven hozzuk létre:
*resource CsomagEroforras: Modema:{default}:#PackageResource {
name: "Csomag létrehozása";
package_name: "SimplePackage";
sources: {"add.pms"};
};
A könyvtár generált fejlesztői dokumentációja:
*resource KonyvtarDokumentacio: Modema:{default}:#DevDocResource {
name: "Csomag fejlesztői dokumentációja";
type: "doc";
generator: "getLibraryDocumentation()";
target: "library_doc";
};
Tesztelés:
*resource Teszteles: Modema:{default}:#TestTargetResource {
name: "Az add() funkció egyszerű tesztelése.";
generator: "testTarget()";
};
//! Nagyon egyszerű tesztelés.
[std:target]
*method bool testTarget () {
*return add(1, 2) == 3;
};
Megosztott erőforrások¶
A manifest és a speciális projekt osztály tartalma implicit megosztott adat, feltérképezésnél betölthető és kiértékelhető. Amennyiben a manifest tartalmaz egy «resources» mezőt, a projekt vagy csomag teljes betöltése nélkül lehetőség van a megosztott erőforrás elkülönített betöltésére. Így plusz ontológiai információt lehet szolgáltatni az add() funkcióról teljes betöltés nélkül.
Nagyobb terjedelmű csomag létrehozása¶
Eddig a kötelező elemek kerültek bemutatva egy nagyon egyszerű példán keresztül. Ezen felül a projekt felépítése opcionlis, a következő alkönyvtár elnevezések ajánlottak:
Code/: a projekt betöltéshez és működéséhez szükséges forráskódok (célok, tesztek).
Documentation/: a projekt dokumentációja.
Library/: a betölthető csomag tartalma.
Amennyiben a projekt és a csomag tartalma szét van választva, a következő módosításokra van szükség: a projekt betölésénél megadunk mindent, a csomag erőforrásnál csak a csomagra vonatkozó részeket.
manifest.meta.json:
"import": [ "Code/", "Library/" ]
project.pms (*resource CsomagEroforras):
sources: { "Library/" };
További példák¶
Specializált működő példák a teszt oldalon (https://try.projectmeta.hu) és a letölthető Node.js csomagban is találhatóak.
Custom.zip: egyedi projekt specializáció
Generic.zip: általános projekt specializáció
Package.zip: csomag készítés
Targets.zip: projekt cél példák
Version.zip: csomag verzió példák
Teljes forráskód¶
Jelen útmutatóban található kódrészek teljes terjedelemben a PackageTutorial_hu.zip archivum tartalmazza.
https://docs.projectmeta.hu/PackageTutorial_hu.zip