2014-11-04 2 views
1

Я пытался создать класс для компиляции некоторого .java, который я создам во время выполнения, но я не могу заставить это работать правильно.Задача компиляции Java и параметр classpath не работают

Вот мой код

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(); 

Я пытаюсь скомпилировать Son.java, который расширяет класс, который находится в ParentProject.jar, но он не работает, даже при использовании «-classpath» флаг. Однако, если я добавлю jar в путь сборки проекта компилятора, он работает (и ему не нужен флаг classpath). Это нормальное поведение?

И это приводит к другой проблеме. Когда я пытаюсь использовать этот кусок кода в проекте, который работает на сервере Tomcat, даже с банками в WEB-INF/lib, я не могу заставить его работать.

ответ

2

Вы можете добавить JAR в свой класс путь следующим образом:

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

Я пришел к такому же решению перед выходными, когда я пытался его снова, я задаюсь вопросом, почему это было так трудно найти информацию об этой опции –