Ошибка API компилятора Java - PullRequest
1 голос
/ 11 октября 2011

Я пытаюсь скомпилировать в памяти класс, который реализует интерфейс.

У меня есть интерфейс с именем CacheRule (в com / vpfw / proxy / logicRules / CacheRule.class).

У меня есть класс с именем CacheRuleBean, который я компилирую в памяти. Если этот класс не реализует CacheRule, компиляция работает. Но если этот класс реализует CacheRule, то ошибка:

java.lang.NoClassDefFoundError: com/vpfw/proxy/logicRules/CacheRule (wrong name: com/vpfw/proxy/logicRules/CacheRuleBean)

Любопытно, что если я выполню эту компиляцию внутри Eclipse, то это сработает. Но когда я выполняю его из Tomcat, я получаю предыдущую ошибку.

Это код для интерфейса CacheRule:

package com.vpfw.proxy.logicRules;
public interface CacheRule
{
 void executeRule();
}

Это код для CacheRuleBean:

package com.vpfw.proxy.logicRules;

import com.vpfw.proxy.logicRules.CacheRule;

public class CacheRuleBean implements CacheRule
{
 public void executeRule() {}
}

И вызов для компиляции:

String[] compilationOptions = { "-cp", classDir };

return (new CompilerService().compile("com.vpfw.proxy.logicRules.CacheRuleBean", 
                   source, compilationOptions));

Где

  • classDir - это каталог /home/app/WEB-INF/classes, в котором находится папка com этого проекта (classPath верен, если я добавлю другие классы этого проекта в качестве импорта в CacheRuleBean, скомпилируйте нормально).
  • Название класса, который я использую, - com.vpfw.proxy.logicRules.CacheRuleBean.
  • source - исходный код CacheRuleBean.
  • CompilerService - моя реализация API компилятора, которая прекрасно работает со всеми классами, кроме тех, которые реализуют интерфейс.

Что я могу делать не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...