이번에 제가 맡은 업무가 좀 노가다(?)성이 짙어서
보다 쉽게 할 수 있는 방법을 찾고 있습니다.
jar파일에 있는 패키지 클래스들과 클래스의 메서드들을
모두 실행 시켜 화면에 출력 시켜야 되는데,
혹시 보다 쉽게 할 수 있는 방안이 있을까요?
잘 하시는 분 말로는 CATCH DOC을 쓰면 된다고 하는데,
그게 뭔지 잘 모르겠군요... ㅠㅠ;;
그냥 시험삼아 작성해 봤습니다. java 안쓰다보니 기억 더듬기에 좋네요.
아직도 java 표준에 jar 파일내에 ClassLoader.getClasses("packageName") 같은 기능 안들어 갔나보네요.
아래 코드는 이렇게 실행하면
java -classpath . PackageUtils /jar_file_path
이렇게 출력해 줍니다.
class 이름 method 이름1 method 이름2
Security 에러가 날수있는데, 해당 클래스는 필터링 하시면 될것 같네요. (ant.jar 로 해봤는데, Exception이 잡히지 않고 Security 에러나는 경우가 있네요. )
남은건 아래 소스에 오브젝트 생성 추가하고 method invoke 추가해서 원하는 메소드들 전부 실행시켜서 얻으면 될듯하네요. 생성자나 파라미터는 제가 알수 있는 범위가 아니니 패스 ;;
PackageUtils.java
import java.util.jar.*; import java.util.*; import java.io.*; import java.net.*; import java.lang.reflect.*; public class PackageUtils { public static List<String> getResourceNames(String jarName){ ArrayList names = new ArrayList (); try{ JarInputStream jarFile = new JarInputStream(new FileInputStream (jarName)); JarEntry jarEntry; while(null != (jarEntry = jarFile.getNextJarEntry()) ) { names.add(jarEntry.getName()); } } catch( Exception e){ e.printStackTrace (); } return names; } public static void main (String[] args) throws Exception { File f = new File(args[0]); List<String> list = PackageUtils.getResourceNames(f.getAbsolutePath()); List<String> names = new ArrayList<String>(); for(String s : list) { if (s.endsWith(".class")){ String n = s.replaceAll("/",".").replaceAll(".class$",""); names.add(n); } } URL jarfile = new URL("jar","","file:" + f.getAbsolutePath() +"!/"); URLClassLoader cl = URLClassLoader.newInstance(new URL[] {jarfile }); for(String n : names){ try{ Class c = cl.loadClass(n); System.out.println(c.getName()); for(Method m : c.getMethods()){ System.out.println(" " + m.getName()); } } catch(Exception e){ System.out.println("fail load : "+ n); e.printStackTrace(); } } } }
---------------------------------------------------------- It's feasible to make an inspiration on your own.
내용 무
그냥 시험삼아 작성해 봤습니다.
그냥 시험삼아 작성해 봤습니다. java 안쓰다보니 기억 더듬기에 좋네요.
아직도 java 표준에 jar 파일내에 ClassLoader.getClasses("packageName") 같은 기능 안들어 갔나보네요.
아래 코드는 이렇게 실행하면
이렇게 출력해 줍니다.
Security 에러가 날수있는데, 해당 클래스는 필터링 하시면 될것 같네요.
(ant.jar 로 해봤는데, Exception이 잡히지 않고 Security 에러나는 경우가 있네요. )
남은건 아래 소스에 오브젝트 생성 추가하고 method invoke 추가해서 원하는 메소드들 전부 실행시켜서 얻으면 될듯하네요.
생성자나 파라미터는 제가 알수 있는 범위가 아니니 패스 ;;
PackageUtils.java
감사합니다. 참고 할께요 ㅎㅎ
----------------------------------------------------------
It's feasible to make an inspiration on your own.
----------------------------------------------------------
It's feasible to make an inspiration on your own.
javap 로 하면 안되나요?
내용 무