2014-11-04 2 views
1

런타임에 생성 할 일부 .java를 컴파일하도록 클래스를 만들려고했으나 올바르게 작동하지 않습니다.Java 컴파일 작업 및 클래스 경로 옵션이 작동하지 않습니다.

여기에 내 코드 나는 ParentProject.jar에있는 클래스를 확장하는 Son.java를 컴파일하기 위해 노력하고있어

File bin = new File(args[args.length-1]); 

    System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_60"); 
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

    StandardJavaFileManager standardJavaFileManager = compiler.getStandardFileManager(null, null, null); 

    try { 
     standardJavaFileManager.setLocation(StandardLocation.CLASS_OUTPUT, Arrays.asList(bin)); 
    } catch (IOException e) { 
     System.err.println("Invalid bin directory"); 
     e.printStackTrace(); 
    } 

    List<String> options = new ArrayList<String>(); 

    options.add("-Xlint:unchecked"); 
    options.add("-classpath"); 
    options.add("e:\\ParentProject.jar"); 

    System.out.println(options); 

    CompilationTask compilationTask = compiler.getTask(null, standardJavaFileManager, null, options, null, standardJavaFileManager.getJavaFileObjectsFromFiles(archives)); 

    compilationTask.call(); 

하지만 그것도 "-classpath"을 사용하여 작동하지 않습니다 깃발. 그러나 컴파일러 프로젝트의 빌드 경로에 항아리를 추가하면 작동합니다 (클래스 경로 플래그가 필요하지 않습니다). 이것은 정상적인 행동입니까?

그리고 다른 문제가 있습니다. Tomcat 서버에서 실행중인 프로젝트에서이 코드를 사용하려고하면 WEB-INF/lib의 jar 파일을 사용하더라도 작동하지 않습니다.

답변

2

당신은 너무처럼 클래스 경로에 JAR을 추가 할 수 있습니다 :이 옵션에 대한 찾을 너무 힘들었다 왜 다시 시도하는 동안

standardJavaFileManager.setLocation(
    StandardLocation.CLASS_PATH, 
    Arrays.asList(new File ("path/to/ParentProject.jar")) 
); 
+0

내가 주말 전에이 같은 솔루션에 와서 궁금해 –