В памяти я строй этой строки:проходит путь к классам EclipseCompiler
package consume;
public class Consumer {
public void consume(String message){
System.out.println(new produce.Producer().produce(message));
}
}
На моей файловой системе я имею C:\Users\hooch\Desktop\produce\Producer.class
, построенные из этого источника:
package produce;
public class Producer {
public String produce(String message){
return "THIS IS THE MESSAGE: " + message;
}
}
Я использую org.eclipse.jdt.internal.compiler.tool.EclipseCompiler
и передать эти параметры:
Arrays.asList(new String[] {"-cp", "C:\\Users\\hooch\\Desktop"});
Я пытаюсь скомпилировать его, но получить эту ошибку
1. ERROR in \Consumer.java (at line 4)
System.out.println(new produce.Producer().produce(message));
^^^^^^^
produce cannot be resolved to a type
Если у меня есть класс продукции.Производитель внутри проекта, который вызывает EclipseCompiler, он работает. (Тогда мне не нужно указывать путь к классам в параметрах). Теперь возникает вопрос: как правильно указать путь к классам, чтобы код в памяти мог обращаться к внешним классам?
Если добавить -verbose опционам, я получаю
[parsing \Consumer.java - #1/1]
[reading java/lang/Object.class]
[reading java/lang/String.class]
[analyzing \Consumer.java - #1/1]
[reading java/lang/System.class]
[reading java/io/PrintStream.class]
[reading java/io/FilterOutputStream.class]
[reading java/io/OutputStream.class]
[reading java/io/Flushable.class]
[reading java/io/Closeable.class]
[reading java/lang/AutoCloseable.class]
----------
1. ERROR in \Consumer.java (at line 4)
System.out.println(new produce.Producer().produce(message));
^^^^^^^
produce cannot be resolved to a type
----------
[completed \Consumer.java - #1/1]
[1 unit compiled]
1 problem (1 error)Exception in thread "main" java.lang.NullPointerException
at impl.SimpleTestCompiler.executeCode(SimpleTestCompiler.java:137)
at impl.SimpleTestCompiler.main(SimpleTestCompiler.java:155)
Хорошо, теперь я уверен, что он должен иметь дело с опцией, потому что пути к классам поменялись EclipseCompiler для javax.tools.ToolProvider.getSystemJavaCompiler (), и я получаю ту же ошибку, что пакет не решен.
Это говорит мне, что он читает .. все на пути к системному классу. но как только дело доходит до выпуска пакета, это одно и то же сообщение об ошибке. – hooch
1) Странно, я получаю сообщение об ошибке в парсере. Это вызвано java.lang.ArrayIndexOutOfBoundsException: -1 at org.eclipse.jdt.internal.compiler.parser.Parser.parse (Parser.java:9654) 2) Это займет время 3) Это только имя файла , Я просто передал потребляю. Потребовался он, и он жаловался на публичный класс Consumer, не находящийся в собственном файле. Так что это правильно. (Кроме того, я уже видел, что он работает так, но с пакетом производителя внутри того же проекта) – hooch
Кстати, если вас интересует весь код, я взял его отсюда: http: //blog.nobel-joergensen .com/2008/07/16/using-eclipse-compiler-to-create-dynamic-java-objects-2/ – hooch