ComiaTip Mitä löytyy classpathista?


Mitä löytyy classpathista?

Kirjoittanut J-P Julkaistu 19.2.2009

Aina silloin tällöin tulee eteen tilanne, jossa haluaisi tietää mitä ihmeen tiedostoja classpathista oikein löytyy. Jos kysyt googlelta vastausta tähän kysymykseen saat tusinoittain vastauksia, jotka kertovat miten olet classpathin määritellyt ja mitä kansioita ja jar-paketteja classpathissasi on. Tämä ei kuitenkaan aina riitä. Usein haluan tietää mitä tiedostoja nuo kansiot ja jar tiedostot sisältävät. Esimerkiksi jos saman niminen properties tiedosto -löytyy classpathista kaksi kertaa voi tuloksena olla oudosti käyttätyvä ohjelma.

Joka tapauksessa alla oleva koodin pätkä auttaa selvittämään tiedosto tasolla, mitä kaikkea classpathisi on syönyt.

import java.io.File; import java.io.IOException; import java.util.Enumeration; import java.util.jar.JarEntry; import java.util.jar.JarFile; public class ClassPath { public static void main(String[] args) throws IOException { String classPath = System.getProperty( "java.class.path" ); String[] pathElements = classPath.split(File.pathSeparator); for (String element:pathElements){ System.out.println(element); File file = new File(element); if (file.exists() && file.isFile() && element.endsWith(".jar")) printJarContent(file); else if (file.exists() && file.isDirectory()) printDirContent(file); } } /** * Tulostaa kansion sisällön rekursiivisesti. * @param dir kansio. */ private static void printDirContent(File dir) { if (dir==null || !dir.exists() || !dir.isDirectory()) return; for (File file:dir.listFiles()){ System.out.println(file.getPath()); printDirContent(file); } } /** * Tulostaa jar tiedoston sisällön. * @param jarFile jar -tiedosto * @throws java.io.IOException Mikäli jar-tiedoston * luku epäonnistuu */ private static void printJarContent(File jarFile) throws IOException { JarFile jar = new JarFile(jarFile); Enumeration entries = jar.entries(); while (entries.hasMoreElements()){ System.out.println(jarFile+"!/"+ entries.nextElement().getName()); } } }