1 package org.apache.maven.plugin.coreit; 2 3 /* 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 * KIND, either express or implied. See the License for the 18 * specific language governing permissions and limitations 19 * under the License. 20 */ 21 22 import org.apache.maven.plugin.MojoExecutionException; 23 24 import java.io.File; 25 import java.net.MalformedURLException; 26 import java.net.URL; 27 import java.net.URLClassLoader; 28 import java.util.List; 29 30 /** 31 * Loads classes and/or resources from a custom class loader that holds the project dependencies and records the results 32 * in a properties file. 33 * 34 * @goal load-dependencies 35 * @phase initialize 36 * @requiresDependencyResolution compile 37 * 38 * @author Benjamin Bentmann 39 * @version $Id: LoadDependenciesMojo.java 799883 2009-08-01 15:06:37Z bentmann $ 40 */ 41 public class LoadDependenciesMojo 42 extends AbstractLoadMojo 43 { 44 45 /** 46 * The project's class path to load classes/resources from. 47 * 48 * @parameter default-value="${project.compileClasspathElements}" 49 * @readonly 50 */ 51 private List classPath; 52 53 /** 54 * The path to the properties file used to track the results of the class/resource loading via the project class 55 * loader. 56 * 57 * @parameter expression="${clsldr.projectClassLoaderOutput}" 58 */ 59 private File projectClassLoaderOutput; 60 61 /** 62 * Runs this mojo. 63 * 64 * @throws MojoExecutionException If the output file could not be created. 65 */ 66 public void execute() 67 throws MojoExecutionException 68 { 69 URL[] urls = new URL[classPath.size()]; 70 for ( int i = 0; i < urls.length; i++ ) 71 { 72 try 73 { 74 urls[i] = new File( (String) classPath.get( i ) ).toURI().toURL(); 75 getLog().info( "[MAVEN-CORE-IT-LOG] Using " + urls[i] ); 76 } 77 catch ( MalformedURLException e ) 78 { 79 getLog().error( "[MAVEN-CORE-IT-LOG] Failed to convert to URL " + classPath.get( i ), e ); 80 } 81 } 82 83 ClassLoader projectClassLoader = new URLClassLoader( urls, getClass().getClassLoader() ); 84 85 ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); 86 try 87 { 88 Thread.currentThread().setContextClassLoader( projectClassLoader ); 89 90 execute( projectClassLoaderOutput, projectClassLoader ); 91 } 92 finally 93 { 94 Thread.currentThread().setContextClassLoader( contextClassLoader ); 95 } 96 } 97 98 }