8. Pods
Overview
Pods are the top of Fantom's namespace as well as the unit of deployment. A pod's name is globally unique and is used to organize the top level of Fantom's namespace. In this respect pods serve the purpose of both a Java package and a JAR file (or .NET namespace and DLL).
Pod Meta
Pods do not use Facets for metadata like types and slots. Rather pod metadata is managed as name/value pairs. Key metadata about your pod is defined in the build script:
class Build : build::BuildPod { new make() { podName = "myPod" summary = "Summary description of my pod" depends = ["sys 1.0", "web 1.0"] meta = ["acme.sku": "0xdeadbeef"] srcDirs = [`fan/`] resDirs = [`locale/`] } }
During the build process fields like podName
and depends
are used by the compiler to generate the pod's metadata. You can define your own additional name/value pairs with BuildPod.meta
. Plus the compiler will add its own metadata regarding when and where the pod was built.
Metadata is stored "/meta.props" in the pod zip file. The Pod.meta
method is used to access a pod's metadata at runtime.
The following are the standardized user defined keys:
org.name
: name of the organization who developed the pod; the name should be a unique string name used consistently across all podsorg.uri
: web site URL of the organizationproj.name
: name of the project which groups one or pods; should be a unique string name used consistently across all podsproj.uri
: web site URL of the projectlicense.name
: name of the license used by the project which should be "Commercial" or one of the long names defined by OSIvcs.name
: name of the version control system: "Mercurial", "Git", "Subversion"vcs.uri
: URI of the public version control repository
The following are the standardized keys automatically defined by compiler:
pod.name
: name of the podpod.version
:Version
of the podpod.depends
: list of semicolon separatedDepend
stringspod.summary
: overview decription for podpod.isScript
: was the pod compiled in script modepod.docSrc
: should documentation include source code, seeBuildPod
pod.docApi
: should pod be included in documentation, seeBuildPod
pod.js
: does pod include client side JavaScript code (true or false)pod.native.java
: does pod use native Java code (true or false)pod.native.dotnet
: does pod use native .NET code (true or false)pod.native.js
: does pod use native JavaScript code (true or false)fcode.version
: binary format version of the fcodebuild.ts
: compile time in local timezone formatted asDateTime
build.platform
: compile env platform formatted asEnv.platform
build.host
: compile env host name, seeEnv.host
build.user
: compile env user name, seeEnv.user
build.compiler
: compiler pod version