기존에 글에서 작성한 클래스 파일 생성 메소드를 통해 실제 파일을 동작 시켜 보겠다.

 

1. 원하는 자바 파일 내용을 입력. 

    public String getJava(){
        String javaText =
                "public class Test {\n" +
                        "    public static void main(String[] args) {\n" +
                        "        int arr[] = new int[10];\n" +
                        "        for(int i=0; i<10; i++){\n" +
                        "            arr[i] = i;\n" +
                        "        }\n" +
                        "        int sum=0;   " +
                        "        for(int i=0; i<10; i++){\n" +
                        "            sum += arr[i];\n" +
                        "        }\n" +
                        "        System.out.println(sum);\n" +
                        "    }\n" +
                        "}\n";
        return javaText;
    }

 

2.기존에 만들어둔 자바 컴파일러를 이용해 호출하는 예제.

   컴파일시 에러가 발생하면 컴파일 자체에서 에러 메세지가 생성됨으로 에러가 있는지 파악 하기 위해 검사 진행. 

        String clasName = "Test";
        String error = compile("Test",getJava());
        //error
        if (!error.trim().equals("")) {
            System.out.println(error);
        }

 

3. 컴파일로 생성된 클래스 파일을 호출.

        String folder = System.getProperty("user.dir") + "\\dynamic";

        File file = new File(folder, clasName + ".class");
        byte[] classByte =  classByte = Files.readAllBytes(file.toPath());
        file.delete();

 

4. 클래스 파일로 생성된 값을 클래스 로더를 통해 호출

public class FileClassLoader extends ClassLoader
{
    public Class findClass(byte[] classByte, String name) throws ClassNotFoundException
    {
        return defineClass(name, classByte, 0, classByte.length);d
    }
}
	FileClassLoader fc = new FileClassLoader();
	Class dynamic = fc.findClass(classByte, "dynamic." + clasName);

 

5. 클래스 로더로 호출된 클래스를 인보크 메소드를 통해 메인 메소드 실행.

    인보크 와 관련하여 궁금한점이 있다면 자바 리플렉션에 관하여 한번 찾아보면 좋은 공부가 될것

     Object obj =  dynamic.newInstance();
     Method main = dynamic.getMethod("main", String[].class);
     String[] params = null;
     main.invoke(obj, (Object) params);

6. 다음은 해당 동적 자바 소스를 이용해서 실행시킨 내용.

'JAVA > Java Study' 카테고리의 다른 글

[Java] 크롤링과 API 차이  (0) 2023.10.23
[Java] 크롤링 1  (0) 2023.10.19
[Java] runnable.jar 를 실행시켜 보자  (0) 2023.09.26
[Java] 자바 동적 컴파일3  (0) 2023.09.26
자바 동적 컴파일  (0) 2023.09.18

+ Recent posts