/** * Copyright © 2006-2016 Web Cohesion (info@webcohesion.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.webcohesion.enunciate.mojo; import com.webcohesion.enunciate.Enunciate; import com.webcohesion.enunciate.EnunciateException; import com.webcohesion.enunciate.artifacts.Artifact; import com.webcohesion.enunciate.module.DocumentationProviderModule; import com.webcohesion.enunciate.module.EnunciateModule; import com.webcohesion.enunciate.module.WebInfAwareModule; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; import java.io.File; import java.io.IOException; import java.util.Set; /** * Assembles the Enunciate documentation. * * @author Ryan Heaton */ @Mojo ( name = "assemble", defaultPhase = LifecyclePhase.PROCESS_SOURCES, requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME ) public class AssembleBaseMojo extends ConfigMojo { /** * The directory where the docs are put. */ @Parameter( defaultValue = "${project.build.directory}/${project.build.finalName}", property = "enunciate.docsDir", required = true ) protected String docsDir; /** * The name of the subdirectory where the documentation is put. */ @Parameter protected String docsSubdir; /** * The directory where the webapp is built. If using this goal along with "war" packaging, this must be configured to be the * same value as the "webappDirectory" parameter to the war plugin. */ @Parameter(defaultValue = "${project.build.directory}/${project.build.finalName}", property = "enunciate.webappDirectory") protected String webappDirectory; /** * Whether to force the "packaging" of the project to be "war" packaging. */ @Parameter(defaultValue = "true") protected boolean forceWarPackaging = true; /** * The path to the WEB-INF directory for the webapp. */ @Parameter( defaultValue = "${basedir}/src/main/webapp/WEB-INF" ) protected String webInfDirectory; @Override protected void applyAdditionalConfiguration(EnunciateModule module) { super.applyAdditionalConfiguration(module); if (module instanceof DocumentationProviderModule) { DocumentationProviderModule docsProvider = (DocumentationProviderModule) module; docsProvider.setDefaultDocsDir(new File(this.docsDir)); if (this.docsSubdir != null) { docsProvider.setDefaultDocsSubdir(this.docsSubdir); } } if (module instanceof WebInfAwareModule) { ((WebInfAwareModule)module).setWebInfDir(new File(this.webInfDirectory)); } } @Override public void execute() throws MojoExecutionException { if (skipEnunciate) { getLog().info("Skipping enunciate per configuration."); return; } if (forceWarPackaging && !"war".equalsIgnoreCase(this.project.getPackaging())) { throw new MojoExecutionException("The 'assemble' goal requires 'war' packaging."); } super.execute(); } @Override protected void postProcess(Enunciate enunciate) { super.postProcess(enunciate); File webInfClasses = new File(new File(new File(this.webappDirectory), "WEB-INF"), "classes"); webInfClasses.mkdirs(); Set<com.webcohesion.enunciate.artifacts.Artifact> artifacts = enunciate.getArtifacts(); for (Artifact artifact : artifacts) { if (artifact.isBelongsOnServerSideClasspath()) { try { artifact.exportTo(webInfClasses, enunciate); } catch (IOException e) { throw new EnunciateException(e); } } } } }