001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019 020 package org.apache.geronimo.genesis.plugins.tools; 021 022 import java.io.File; 023 import java.io.IOException; 024 import java.util.List; 025 import java.util.Iterator; 026 import java.util.ArrayList; 027 import java.util.zip.ZipFile; 028 import java.util.zip.ZipEntry; 029 import java.util.zip.ZipException; 030 031 import org.apache.maven.project.MavenProject; 032 import org.apache.maven.plugin.MojoExecutionException; 033 import org.apache.maven.artifact.Artifact; 034 035 import org.apache.geronimo.genesis.MojoSupport; 036 037 /** 038 * Verify (kinda) that legal files are in all attached zip-encoded artifacts. 039 * 040 * @goal verify-legal-files 041 * @phase verify 042 * 043 * @version $Rev: 486868 $ $Date: 2006-12-13 14:25:38 -0800 (Wed, 13 Dec 2006) $ 044 */ 045 public class VerifyLegalFilesMojo 046 extends MojoSupport 047 { 048 /** 049 * The default required legal files. 050 */ 051 private static final String[] DEFAULT_REQUIRED_FILES = { 052 "LICENSE.txt", 053 "NOTICE.txt" 054 }; 055 056 /** 057 * When set to true, fail the build when no legal files are found. 058 * 059 * @parameter default-value="false" 060 */ 061 private boolean strict; 062 063 064 /** 065 * The list of required legal files. 066 * 067 * @parameter 068 */ 069 private String[] requiredFiles = DEFAULT_REQUIRED_FILES; 070 071 /** 072 * The maven project. 073 * 074 * @parameter expression="${project}" 075 * @required 076 * @readonly 077 */ 078 protected MavenProject project = null; 079 080 protected void doExecute() throws Exception { 081 List artifacts = new ArrayList(); 082 artifacts.add(project.getArtifact()); 083 artifacts.addAll(project.getAttachedArtifacts()); 084 085 Iterator iter = artifacts.iterator(); 086 while (iter.hasNext()) { 087 Artifact artifact = (Artifact)iter.next(); 088 File file = artifact.getFile(); 089 090 // Some artifacts might not have files, so skip them 091 if (file == null) { 092 log.debug("Skipping artifact; no attached file: " + artifact); 093 continue; 094 } 095 096 try { 097 ZipFile zfile = new ZipFile(file); 098 099 log.info("Checking legal files in: " + file.getName()); 100 101 if (!containsLegalFiles(zfile)) { 102 String msg = "Artifact does not contain any legal files: " + file.getName(); 103 if (strict) { 104 throw new MojoExecutionException(msg); 105 } 106 else { 107 log.warn(msg); 108 } 109 } 110 } 111 catch (ZipException e) { 112 log.debug("Failed to check file for legal muck; ignoring: " + file, e); 113 } 114 } 115 } 116 117 private boolean containsLegalFiles(final ZipFile file) throws IOException { 118 assert file != null; 119 120 return containsLegalFiles(file, "META-INF") || 121 containsLegalFiles(file, project.getArtifactId() + "-" + project.getVersion()); 122 } 123 124 private boolean containsLegalFiles(final ZipFile file, final String basedir) { 125 assert file != null; 126 assert basedir != null; 127 128 for (int i=0; i < requiredFiles.length; i++) { 129 String filename = basedir + "/" + requiredFiles[i]; 130 log.debug("Checking for: " + filename); 131 132 ZipEntry entry = file.getEntry(filename); 133 if (entry == null) { 134 return false; 135 } 136 } 137 138 return true; 139 } 140 }