class Builder extends BuildSettings.Builder<Builder> {

		private MavenParent parent;

		private String packaging;

		private String name;

		private String description;

		private List<MavenLicense> licenses = new ArrayList<>();

		private List<MavenDeveloper> developers = new ArrayList<>();

		private final MavenScm.Builder scm = new MavenScm.Builder();

		private String defaultGoal;

		private String finalName;

		private String sourceDirectory;

		private String testSourceDirectory;

		public Builder() {
		}

		/**
		 * Set the coordinates of the project.
		 * @param groupId the group ID of the project
		 * @param artifactId the artifact ID of the project
		 * @return this for method chaining
		 */
		public Builder coordinates(String groupId, String artifactId) {
			return group(groupId).artifact(artifactId);
		}

		/**
		 * Set the coordinates of the parent, to be resolved against the repository.
		 * @param groupId the groupID of the parent
		 * @param artifactId the artifactID of the parent
		 * @param version the version of the parent
		 * @return this for method chaining
		 * @see #parent(String, String, String, String)
		 */
		public Builder parent(String groupId, String artifactId, String version) {
			return parent(groupId, artifactId, version, "");
		}

		/**
		 * Set the coordinates of the parent and its relative path. The relative path can
		 * be set to {@code null} to let Maven search the parent using local file search,
		 * for instance {@code pom.xml} in the parent directory. It can also be set to an
		 * empty string to specify that it should be resolved against the repository.
		 * @param groupId the groupID of the parent
		 * @param artifactId the artifactID of the parent
		 * @param version the version of the parent
		 * @param relativePath the relative path
		 * @return this for method chaining
		 */
		public Builder parent(String groupId, String artifactId, String version, String relativePath) {
			this.parent = new MavenParent(groupId, artifactId, version, relativePath);
			return self();
		}

		/**
		 * Set the packaging of the project.
		 * @param packaging the packaging
		 * @return this for method chaining
		 * @see Packaging
		 */
		public Builder packaging(String packaging) {
			this.packaging = packaging;
			return self();
		}

		/**
		 * Set the name of the project.
		 * @param name the name of the project
		 * @return this for method chaining
		 */
		public Builder name(String name) {
			this.name = name;
			return self();
		}

		/**
		 * Set a human readable description of the project.
		 * @param description the description of the project
		 * @return this for method chaining
		 */
		public Builder description(String description) {
			this.description = description;
			return self();
		}

		/**
		 * Set the licenses of the project.
		 * @param licenses the licenses associated with the project
		 * @return this for method chaining
		 */
		public Builder licenses(MavenLicense... licenses) {<FILL_FUNCTION_BODY>}

		/**
		 * Set the developers of the project.
		 * @param developers the developers associated with the project
		 * @return this for method chaining
		 */
		public Builder developers(MavenDeveloper... developers) {
			this.developers = (developers != null) ? Arrays.asList(developers) : new ArrayList<>();
			return self();
		}

		/**
		 * Customize the {@code scm} section using the specified consumer.
		 * @param scm a consumer of the current version control section
		 * @return this for method chaining
		 */
		public Builder scm(Consumer<MavenScm.Builder> scm) {
			scm.accept(this.scm);
			return self();
		}

		/**
		 * Set the name of the bundled project when it is finally built.
		 * @param finalName the final name of the artifact
		 * @return this for method chaining
		 */
		public Builder finalName(String finalName) {
			this.finalName = finalName;
			return self();
		}

		/**
		 * Set the default goal or phase to execute if none is given.
		 * @param defaultGoal the default goal or {@code null} to use the default
		 * @return this for method chaining
		 */
		public Builder defaultGoal(String defaultGoal) {
			this.defaultGoal = defaultGoal;
			return self();
		}

		/**
		 * Set the the location of main source code. Can use Maven properties such as
		 * {@code ${basedir}}.
		 * @param sourceDirectory the location of main source code or {@code null} to use
		 * the default
		 * @return this for method chaining
		 */
		public Builder sourceDirectory(String sourceDirectory) {
			this.sourceDirectory = sourceDirectory;
			return self();
		}

		/**
		 * Set the the location of test source code. Can use Maven properties such as
		 * {@code ${basedir}}.
		 * @param testSourceDirectory the location of test source code or {@code null} to
		 * use the default
		 * @return this for method chaining
		 */
		public Builder testSourceDirectory(String testSourceDirectory) {
			this.testSourceDirectory = testSourceDirectory;
			return self();
		}

		@Override
		public MavenBuildSettings build() {
			return new MavenBuildSettings(this);
		}

	}

			this.licenses = (licenses != null) ? Arrays.asList(licenses) : new ArrayList<>();
			return self();
		
<methods>public java.lang.String getArtifact() ,public java.lang.String getGroup() ,public java.lang.String getVersion() <variables>private final non-sealed java.lang.String artifact,private final non-sealed java.lang.String group,private final non-sealed java.lang.String version