001 /* 002 * #%L 003 * License Maven Plugin 004 * 005 * $Id: AggregatorAddThirdPartyMojo.java 14409 2011-08-10 15:30:41Z tchemit $ 006 * $HeadURL: http://svn.codehaus.org/mojo/tags/license-maven-plugin-1.0/src/main/java/org/codehaus/mojo/license/AggregatorAddThirdPartyMojo.java $ 007 * %% 008 * Copyright (C) 2008 - 2011 CodeLutin, Codehaus, Tony Chemit 009 * %% 010 * This program is free software: you can redistribute it and/or modify 011 * it under the terms of the GNU Lesser General Public License as 012 * published by the Free Software Foundation, either version 3 of the 013 * License, or (at your option) any later version. 014 * 015 * This program is distributed in the hope that it will be useful, 016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 018 * GNU General Lesser Public License for more details. 019 * 020 * You should have received a copy of the GNU General Lesser Public 021 * License along with this program. If not, see 022 * <http://www.gnu.org/licenses/lgpl-3.0.html>. 023 * #L% 024 */ 025 026 package org.codehaus.mojo.license; 027 028 import java.io.File; 029 import java.io.IOException; 030 import java.util.List; 031 import java.util.SortedMap; 032 import java.util.SortedSet; 033 034 import org.apache.commons.collections.CollectionUtils; 035 import org.apache.maven.plugin.MojoFailureException; 036 import org.apache.maven.plugin.logging.Log; 037 import org.apache.maven.project.MavenProject; 038 import org.apache.maven.project.ProjectBuildingException; 039 import org.codehaus.mojo.license.model.LicenseMap; 040 041 /** 042 * This aggregator goal (will be executed only once and only on pom projects) executed the {@code add-third-party} on 043 * all his modules (in a parellel build cycle) then aggreates all the third-party files in final one in the pom project. 044 * 045 * @author tchemit <chemit@codelutin.com> 046 * @goal aggregate-add-third-party 047 * @phase generate-resources 048 * @requiresProject true 049 * @aggregator 050 * @execute goal="add-third-party" 051 * @since 1.0 052 */ 053 public class AggregatorAddThirdPartyMojo extends AbstractAddThirdPartyMojo { 054 055 /** 056 * The projects in the reactor. 057 * 058 * @parameter expression="${reactorProjects}" 059 * @readonly 060 * @required 061 * @since 1.0 062 */ 063 protected List<?> reactorProjects; 064 065 @Override 066 protected boolean checkPackaging() { 067 return acceptPackaging("pom"); 068 } 069 070 @Override 071 protected boolean checkSkip() { 072 if (!isDoGenerate() && !isDoGenerateBundle()) { 073 074 getLog().info("All files are up to date, skip goal execution."); 075 return false; 076 } 077 return super.checkSkip(); 078 } 079 080 @Override 081 protected SortedMap<String, MavenProject> loadDependencies() { 082 // use the cache filled by modules in reactor 083 return getArtifactCache(); 084 } 085 086 @Override 087 protected SortedProperties createUnsafeMapping() throws ProjectBuildingException, IOException { 088 089 String path = getMissingFile().getAbsolutePath().substring( 090 getProject().getBasedir().getAbsolutePath().length() + 1); 091 092 if (isVerbose()) { 093 getLog().info("Use missing file path : " + path); 094 } 095 096 SortedProperties unsafeMappings = new SortedProperties(getEncoding()); 097 098 LicenseMap licenseMap = getLicenseMap(); 099 100 for (Object o : reactorProjects) { 101 MavenProject p = (MavenProject) o; 102 103 File file = new File(p.getBasedir(), path); 104 105 if (file.exists()) { 106 107 SortedProperties tmp = getThridPartyTool().loadUnsafeMapping(licenseMap, getArtifactCache(), 108 getEncoding(), file); 109 unsafeMappings.putAll(tmp); 110 } 111 112 SortedSet<MavenProject> unsafes = getThridPartyTool().getProjectsWithNoLicense(licenseMap, isVerbose()); 113 if (CollectionUtils.isEmpty(unsafes)) { 114 115 // no more unsafe dependencies, can break 116 break; 117 } 118 } 119 return unsafeMappings; 120 } 121 122 @Override 123 protected void doAction() throws Exception { 124 Log log = getLog(); 125 126 if (exists(getArtifactLicenseMapping())) { 127 File propertiesFile = copyToFileSystem(getArtifactLicenseMapping()); 128 setMissingFile(propertiesFile); 129 } 130 131 if (isVerbose()) { 132 log.info("After executing on " + reactorProjects.size() + " project(s)"); 133 } 134 SortedMap<String, MavenProject> artifacts = getArtifactCache(); 135 136 LicenseMap licenseMap = getLicenseMap(); 137 138 getLog().info(artifacts.size() + " detected artifact(s)."); 139 if (isVerbose()) { 140 for (String id : artifacts.keySet()) { 141 getLog().info(" - " + id); 142 } 143 } 144 getLog().info(licenseMap.size() + " detected license(s)."); 145 if (isVerbose()) { 146 for (String id : licenseMap.keySet()) { 147 getLog().info(" - " + id); 148 } 149 } 150 boolean unsafe = checkUnsafeDependencies(); 151 152 writeThirdPartyFile(); 153 154 if (unsafe && isFailIfWarning()) { 155 throw new MojoFailureException("There is some dependencies with no license, please review the modules."); 156 } 157 } 158 159 }