Получение аннотаций платформы Netbeans, работающих в Eclipse

Платформа Netbeans недавно представила на основе аннотаций создание файлов ресурсов. такие как пакеты и файл layer.xml.

Наличие проекта платформы Netbeans на основе Maven в Netbeans (где работают эти аннотации) позволяет легко импортировать тот же самый проект в Eclipse.

Но почему-то, несмотря на то, что проект корректно импортирован (или по крайней мере вроде бы корректно импортирован‹-- скачаны необходимые библиотеки и т.д.), упомянутые выше аннотации не выполняются Eclipse.

В симптомах отсутствуют сгенерированные классы, импортированные в классы, использующие эти аннотации.

Пример:

import org.netbeans.api.settings.ConvertAsProperties;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.windows.TopComponent;
import org.openide.util.NbBundle.Messages;

/**
 * Top component which displays something.
 */
@ConvertAsProperties(
    dtd = "-//org.something.ui//Exp//EN",
autostore = false)
@TopComponent.Description(
    preferredID = "ExpTopComponent",
//iconBase="SET/PATH/TO/ICON/HERE", 
persistenceType = TopComponent.PERSISTENCE_ALWAYS)
@TopComponent.Registration(mode = "output", openAtStartup = true)
@ActionID(category = "Window", id = "ExpTopComponent")
@ActionReference(path = "Menu/Window" /*, position = 333 */)
@TopComponent.OpenActionRegistration(
    displayName = "#CTL_ExpAction",
preferredID = "ExpTopComponent")
@Messages({
  "CTL_ExpAction=Example",
  "CTL_ExpTopComponent=Example Window",
  "HINT_ExpTopComponent=This is a Example window"
})
public final class ExpTopComponent extends TopComponent {

  public ExpTopComponent() {
    initComponents();
    setName(Bundle.CTL_ExpTopComponent());
    setToolTipText(Bundle.HINT_ExpTopComponent());
    putClientProperty(TopComponent.PROP_CLOSING_DISABLED, Boolean.TRUE);

  }

  private void initComponents() {
    setLayout(new java.awt.BorderLayout());

    outlineView1 = new org.openide.explorer.view.OutlineView();
    add(outlineView1, java.awt.BorderLayout.CENTER);
  }

  private org.openide.explorer.view.OutlineView outlineView1;
  @Override
  public void componentOpened() {
    // TODO add custom code on component opening
  }

  @Override
  public void componentClosed() {
    // TODO add custom code on component closing
  }

  void writeProperties(java.util.Properties p) {
    p.setProperty("version", "1.0");
    // TODO store your settings
  }

  void readProperties(java.util.Properties p) {
    String version = p.getProperty("version");
    // TODO read your settings according to their version
  }
}

Как видно из приведенного выше примера, аннотации широко используются, но не обрабатываются Eclipse, что приводит к тому, что следующие строки не компилируются из-за того, что Bundle (который должен быть сгенерирован автоматически) не распознается как известный класс.

    setName(Bundle.CTL_ExpTopComponent());
    setToolTipText(Bundle.HINT_ExpTopComponent());

Дальнейшая информация:

Используемый Eclipse - это Juno и в свойствах проектов включена обработка аннотаций.

Кто-нибудь знает, как заставить это работать в Eclipse?


person stryba    schedule 02.01.2013    source источник


Ответы (1)


Оказывается, вам также нужно указать библиотеки, содержащие обработчики аннотаций для аннотаций netbeans, что, мягко говоря, утомительно (в любом случае обработка аннотаций в eclipse кажется нелогичной).

Что лучше всего работает, так это запускать простую сборку maven в проекте всякий раз, когда аннотация была изменена, и все готово.

person stryba    schedule 12.06.2014
comment
Это не совсем ответ; класс NbBundle.Messages находится внутри jar-файла org.openide.util, но если он связан как обработчик аннотаций, он, похоже, не работает (по крайней мере, для меня). Настоящий ответ показал бы, как исправить вопрос, а не о, это слишком сложно, вместо этого я отвечу на вопрос, который предпочитаю. - person Stephen; 26.04.2016