From e7ab5b24d8ac003f58fdd8dc948cda4d2704c39a Mon Sep 17 00:00:00 2001 From: Simon Kitching Date: Tue, 1 Aug 2006 01:13:11 +0000 Subject: [PATCH] Allow libs for test to be discovered via the classpath as well as via system properties. This has been implemented to suppprt running tests via the maven surefire plugin, but is a general-purpose mechanism. git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/logging/trunk@427394 13f79535-47bb-0310-9956-ffa450edef68 --- .../commons/logging/PathableClassLoader.java | 66 +++++++++++++++---- 1 file changed, 55 insertions(+), 11 deletions(-) diff --git a/src/test/org/apache/commons/logging/PathableClassLoader.java b/src/test/org/apache/commons/logging/PathableClassLoader.java index f2c3a3b..94de5fa 100644 --- a/src/test/org/apache/commons/logging/PathableClassLoader.java +++ b/src/test/org/apache/commons/logging/PathableClassLoader.java @@ -197,22 +197,66 @@ public class PathableClassLoader extends URLClassLoader { * classes. */ public void addLogicalLib(String logicalLib) { + // first, check the system properties String filename = System.getProperty(logicalLib); - if (filename == null) { - throw new UnknownError( - "Logical lib [" + logicalLib + "] is not defined" - + " as a System property."); + if (filename != null) { + try { + URL libUrl = new File(filename).toURL(); + addURL(libUrl); + return; + } catch(java.net.MalformedURLException e) { + throw new UnknownError( + "Invalid file [" + filename + "] for logical lib [" + logicalLib + "]"); + } } - try { - URL url = new File(filename).toURL(); - addURL(url); - } catch(java.net.MalformedURLException e) { - throw new UnknownError( - "Invalid file [" + filename + "] for logical lib [" + logicalLib + "]"); + // now check the classpath for a similar-named lib + URL libUrl = libFromClasspath(logicalLib); + if (libUrl != null) { + addURL(libUrl); + return; } + + // lib not found + throw new UnknownError( + "Logical lib [" + logicalLib + "] is not defined" + + " as a System property."); + } + + private URL libFromClasspath(String logicalLib) { + ClassLoader cl = this.getClass().getClassLoader(); + if (cl instanceof URLClassLoader == false) { + return null; + } + + URLClassLoader ucl = (URLClassLoader) cl; + URL[] path = ucl.getURLs(); + for(int i=0; i= 0) { + filename = filename.substring(lastSlash+1); + } + + if (filename.startsWith(logicalLib)) { + System.out.println("found lib " + logicalLib + " at url " + u); + return u; + } else { + System.out.println("lib " + logicalLib + " does not match [" + filename + "] at url " + u); + } + } + + return null; + } - /** * Override ClassLoader method. *