Description
Find a jar that contains a class of the same name, if any.
License
Apache License
Parameter
Parameter | Description |
---|
myClass | the class to find. |
Exception
Parameter | Description |
---|
IOException | an exception |
Return
a jar file that contains the class, or null.
Declaration
private static String findContainingJar(Class<?> myClass,
Map<String, String> packagedClasses) throws IOException
Method Source Code
//package com.java2s;
/**/*from w w w. j av a 2 s . c o m*/
*
* 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. See accompanying LICENSE file.
*/
import java.io.IOException;
import java.net.URL;
import java.net.URLDecoder;
import java.util.Enumeration;
import java.util.Map;
public class Main {
/**
* Find a jar that contains a class of the same name, if any. It will return
* a jar file, even if that is not the first thing on the class path that
* has a class with the same name. Looks first on the classpath and then in
* the <code>packagedClasses</code> map.
* @param myClass the class to find.
* @return a jar file that contains the class, or null.
* @throws IOException
*/
private static String findContainingJar(Class<?> myClass,
Map<String, String> packagedClasses) throws IOException {
ClassLoader loader = myClass.getClassLoader();
String classFile = myClass.getName().replaceAll("\\.", "/")
+ ".class";
// first search the classpath
for (Enumeration<URL> itr = loader.getResources(classFile); itr
.hasMoreElements();) {
URL url = itr.nextElement();
if ("jar".equals(url.getProtocol())) {
String toReturn = url.getPath();
if (toReturn.startsWith("file:")) {
toReturn = toReturn.substring("file:".length());
}
// URLDecoder is a misnamed class, since it actually decodes
// x-www-form-urlencoded MIME type rather than actual
// URL encoding (which the file path has). Therefore it would
// decode +s to ' 's which is incorrect (spaces are actually
// either unencoded or encoded as "%20"). Replace +s first, so
// that they are kept sacred during the decoding process.
toReturn = toReturn.replaceAll("\\+", "%2B");
toReturn = URLDecoder.decode(toReturn, "UTF-8");
return toReturn.replaceAll("!.*$", "");
}
}
// now look in any jars we've packaged using JarFinder. Returns null when
// no jar is found.
return packagedClasses.get(classFile);
}
}
Related
- findClassJar(final Class> aClass)
- findContainingJar( @SuppressWarnings("rawtypes") Class my_class, ClassLoader loader)
- findContainingJar(Class my_class)
- findContainingJar(Class> clazz)
- findContainingJar(Class> clazz)
- findContainingJar(ClassLoader classLoader, String resourceName)
- findJar(Class> klass)
- findJar(Class> my_class)
- findJar(File dir)