Статьи

Использование процессоров Java 6 в Eclipse

JDK5 представила APT (инструмент обработки аннотаций). Он был частью SDK, но классы были частью неофициального пространства имен com.sun. *, И вам пришлось использовать инструмент apt для обработки исходного кода.

JDK6 очистил API и интегрировал этот материал в сам javac, поэтому вам больше не нужно использовать отдельный инструмент apt.

Созданный для обработки исходного кода с аннотациями до того, как они скомпилированы в классы, он также может использоваться для всех видов развлечений, таких как генерация кода и анализаторы кода, которые не зависят от IDE; и вам даже не обязательно использовать аннотации обязательно. С помощью этого генерируется метамодель API критериев JPA2.

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

Поэтому мы создаем процессор, который будет генерировать новый класс для каждого класса в проектах, скомпилированных с использованием этого процессора. Кроме того , мы создадим предупреждение для каждого класса , который начинается с T . Да, это глупо.

Шаг 1: Создайте проект процессора

SillyProcessor.java:

@SupportedAnnotationTypes(value= {"*"})
@SupportedSourceVersion(SourceVersion.RELEASE_6)
public class SillyProcessor extends AbstractProcessor { 

	private Filer filer;
	private Messager messager;

	@Override
	public void init(ProcessingEnvironment env) {
		filer = env.getFiler();
		messager = env.getMessager();
	}

	@Override
	public boolean process(Set elements, RoundEnvironment env) {

		for (Element element : env.getRootElements()) {

			if (element.getSimpleName().toString().startsWith("Silly")) {
				// We don't want generate new silly classes
				// for auto-generated silly classes
				continue;
			}

			if (element.getSimpleName().toString().startsWith("T")) {
				messager.printMessage(Kind.WARNING,
					"This class name starts with a T!",
					element);
			}

			String sillyClassName = "Silly" + element.getSimpleName();
			String sillyClassContent =
					"package silly;\n"
				+	"public class " + sillyClassName + " {\n"
				+	"	public String foobar;\n"
				+	"}";

			JavaFileObject file = null;

			try {
				file = filer.createSourceFile(
						"silly/" + sillyClassName,
						element);
				file.openWriter()
					.append(sillyClassContent)
					.close();
			} catch (IOException e) {
				e.printStackTrace();
			}

		}

		return true;
	}
}

Без создания этой записи META-INF я не мог заставить процессор зарегистрироваться в Eclipse.

META-INF / услуги / javax.annotation.processing.Processor:

com.kerebus.annotation.processor.SillyProcessor

Его единственным содержимым является имя реализации Процессора. Я думаю, вы могли бы перечислить несколько процессоров здесь, хотя я не уверен.

Вот и все. Теперь экспортируйте его как банку и используйте эту банку в других проектах, где вы хотите использовать процессор.

ШАГ 2: Создайте проект, который использует ваш процессор.

В свойствах вашего нового проекта перейдите в Компилятор Java -> Обработка аннотаций.
Установите флажок «Включить специфичные для проекта настройки» и убедитесь, что «Включить обработку аннотаций» отмечен. Я также изменил созданный исходный каталог на имя, которое не начиналось с точки, чтобы оно не было скрыто в проводнике пакетов (файлы или каталоги, начинающиеся с точки, по умолчанию отфильтровываются в eclipse).

Затем перейдите в Компилятор Java -> Обработка аннотаций -> Путь к фабрике.
Здесь вы должны добавить jar-файл вашего процессора. Вы не можете использовать ссылки проекта.
Нажмите кнопку «Дополнительно» , и вы увидите диалоговое окно, содержащее процессор, который вы определили в файле META-INF / services / javax.annotation.processing.Processor. Выберите его и нажмите ОК.

Шаг 3: Построй!

Мы практически закончили. Вот как это выглядит для меня в моем проекте:

Таким образом, мы получаем предупреждение для класса Thing, потому что его имя начинается с буквы «T», а для каждого класса в проекте мы получаем соответствующие «глупые» классы. Они скомпилированы и могут использоваться как любой другой обычный класс.

Для получения дополнительной информации ознакомьтесь с документами eclipse jdt / apt , в которых рассказывается о создании анализатора кода или официальных документов.

С http://kerebus.com/2011/02/using-java-6-processors-in-eclipse/ .