UNPKG

projen

Version:

CDK for software projects

293 lines (292 loc) • 8.71 kB
import { Component } from "../component"; import { Project } from "../project"; /** * Options for `Pom`. */ export interface PomOptions { /** * This is generally unique amongst an organization or a project. For example, * all core Maven artifacts do (well, should) live under the groupId * org.apache.maven. Group ID's do not necessarily use the dot notation, for * example, the junit project. Note that the dot-notated groupId does not have * to correspond to the package structure that the project contains. It is, * however, a good practice to follow. When stored within a repository, the * group acts much like the Java packaging structure does in an operating * system. The dots are replaced by OS specific directory separators (such as * '/' in Unix) which becomes a relative directory structure from the base * repository. In the example given, the org.codehaus.mojo group lives within * the directory $M2_REPO/org/codehaus/mojo. * @default "org.acme" * @featured */ readonly groupId: string; /** * The artifactId is generally the name that the project is known by. Although * the groupId is important, people within the group will rarely mention the * groupId in discussion (they are often all be the same ID, such as the * MojoHaus project groupId: org.codehaus.mojo). It, along with the groupId, * creates a key that separates this project from every other project in the * world (at least, it should :) ). Along with the groupId, the artifactId * fully defines the artifact's living quarters within the repository. In the * case of the above project, my-project lives in * $M2_REPO/org/codehaus/mojo/my-project. * @default "my-app" * @featured */ readonly artifactId: string; /** * This is the last piece of the naming puzzle. groupId:artifactId denotes a * single project but they cannot delineate which incarnation of that project * we are talking about. Do we want the junit:junit of 2018 (version 4.12), or * of 2007 (version 3.8.2)? In short: code changes, those changes should be * versioned, and this element keeps those versions in line. It is also used * within an artifact's repository to separate versions from each other. * my-project version 1.0 files live in the directory structure * $M2_REPO/org/codehaus/mojo/my-project/1.0. * @default "0.1.0" * @featured */ readonly version: string; /** * Project packaging format. * * @default "jar" */ readonly packaging?: string; /** * Description of a project is always good. Although this should not replace * formal documentation, a quick comment to any readers of the POM is always * helpful. * * @default undefined * @featured */ readonly description?: string; /** * The URL, like the name, is not required. This is a nice gesture for * projects users, however, so that they know where the project lives. * * @default undefined * @featured */ readonly url?: string; /** * A Parent Pom can be used to have a child project inherit * properties/plugins/ect in order to reduce duplication and keep standards * across a large amount of repos * * @default undefined * @featured */ readonly parentPom?: ParentPom; } export interface ParentPom { /** * Parent Pom Group ID */ readonly groupId?: string; /** * Parent Pom Artifact ID */ readonly artifactId?: string; /** * Parent Pom Version */ readonly version?: string; /** * Parent Pom Relative path from the current pom */ readonly relativePath?: string; } /** * Represents a Maven repository * @see https://maven.apache.org/guides/introduction/introduction-to-repositories.html */ export interface MavenRepository { /** * The identifier for the repository */ readonly id: string; /** * The url of the repository */ readonly url: string; /** * The name of the repository */ readonly name?: string; /** * The layout of the repository */ readonly layout?: string; /** * Repository Policy for Snapshots */ readonly snapshots?: MavenRepositoryPolicy; /** * Repository Policy for Releases */ readonly releases?: MavenRepositoryPolicy; } /** * Represents a Maven Repository Policy * @see https://maven.apache.org/settings.html#repositories */ export interface MavenRepositoryPolicy { readonly enabled?: boolean; /** * Update Policy * This element specifies how often updates should attempt to occur. Maven will compare the local POM's timestamp (stored in a repository's maven-metadata file) to the remote. * @default UpdatePolicy.DAILY */ readonly updatePolicy?: UpdatePolicy; /** * Checksum Policy * When Maven deploys files to the repository, it also deploys corresponding checksum files. */ readonly checksumPolicy?: ChecksumPolicy; } export declare class UpdatePolicy { static readonly ALWAYS = "always"; static readonly DAILY = "daily"; static readonly NEVER = "never"; /** * Updates at an interval of X minutes. */ static interval(minutes: number): string; } export declare enum ChecksumPolicy { IGNORE = "ignore", FAIL = "fail", WARN = "warn" } /** * A Project Object Model or POM is the fundamental unit of work in Maven. It is * an XML file that contains information about the project and configuration * details used by Maven to build the project. */ export declare class Pom extends Component { /** * The name of the pom file. */ readonly fileName: string; /** * Maven group ID. */ readonly groupId: string; /** * Maven artifact ID. */ readonly artifactId: string; /** * Project version. */ readonly version: string; /** * Maven packaging format. */ readonly packaging: string; /** * Project display name. */ readonly name?: string; /** * Project description. */ readonly description?: string; /** * Project URL. */ readonly url?: string; private readonly parentPom?; private readonly properties; private readonly repositories; private readonly pluginRepositories; constructor(project: Project, options: PomOptions); /** * Adds a key/value property to the pom. * @param key the key * @param value the value */ addProperty(key: string, value: string): void; /** * Adds a runtime dependency. * * @param spec Format `<groupId>/<artifactId>@<semver>` */ addDependency(spec: string): void; /** * Adds a test dependency. * * @param spec Format `<groupId>/<artifactId>@<semver>` */ addTestDependency(spec: string): void; /** * Adds a build plugin to the pom. * * The plug in is also added as a BUILD dep to the project. * * @param spec dependency spec (`group/artifact@version`) * @param options plugin options */ addPlugin(spec: string, options?: PluginOptions): import("../dependencies").Dependency; /** * Adds a repository to the pom * @param repository the repository to add */ addRepository(repository: MavenRepository): void; addPluginRepository(repository: MavenRepository): void; private synthPom; private synthDependencies; private synthRepositories; private synthPluginRepositories; } /** * Options for Maven plugins. */ export interface PluginOptions { /** * Plugin key/value configuration * @default {} */ readonly configuration?: { [key: string]: any; }; /** * Plugin executions * @default [] */ readonly executions?: PluginExecution[]; /** * You could configure the dependencies for the plugin. * * Dependencies are in `<groupId>/<artifactId>@<semver>` format. * * @default [] */ readonly dependencies?: string[]; } /** * Plugin execution definition. */ export interface PluginExecution { /** * The ID. */ readonly id: string; /** * Which Maven goals this plugin should be associated with. */ readonly goals: string[]; /** * The phase in which the plugin should execute. */ readonly phase?: string; /** * Execution key/value configuration * @default {} */ readonly configuration?: { [key: string]: any; }; }