У меня мало собственных API с общим количеством классов около 2000.Некоторые из них используют новый Path
API от JDK7.Однако большинство других классов не полагаются на любые новые API JDK или новые языковые функции.Поэтому большинство классов можно использовать в среде JDK6 (что я планирую сделать).Предположим, я аннотировал все классы только для JDK7 с помощью @Java7Only
.
. Теперь мне нужен способ создания подмножества только для JDK6 всех моих проектов более или менее автоматически , без введения новой версии ветвления или линейки продуктов (было бы слишком сложно поддерживать).
Все проекты создаются с использованием Netbeans, таким образом, с использованием Ant.Многие проекты зависят от других.
Пожалуйста, помогите мне оценить, какие идеи в соответствии с моей проблемой являются наиболее подходящими.Какие проблемы могут возникнуть с каждой идеей?
Общий первый шаг для всех идей
- Позволяет процессору аннотаций искать классы, аннотированные
@Java7Only
, и сохранять список в properties
файл.
Идея 1 (специфическая)
- Напишите инструмент, который будет использовать файл
properties
для рекурсивного копирования всего проекта, кроме файлов только для JDK7. - Создайте скопированный проект, используя JDK6, вызвав ant, получив, таким образом, JDK6-совместимую флягу.
Идея 2 (специфическая)
- Напишите вторую аннотациюПроцессор, который будет использовать файл
properties
для передачи всего, кроме файлов JDK7, в экземпляр JavaCompiler. - Либо создайте jar-файл с использованием Java API, либо используйте для этого Ant API.
(Это была бы идея только на Java, но, вероятно, слишком сложная)
Идея X (абстрактная)
- Каким-то образом влияет на процесс сборки Ant (перезаписывая некоторые цели?) Идля каждого JDK6-совместимого класса: пусть Ant скомпилирует две версииНет (один раз с компилятором JDK6, другой раз с компилятором JDK7).
- (классы только для JDK7 компилируются только один раз, конечно, с использованием компилятора JDK7)
- Пакет каждыйкуча в отдельную банку.
Возможные общие проблемы с идеями
- Некоторые проекты зависят от других, поэтому некоторые действия (например, упаковка) должны учитывать это.
- Помните: компилятор JDK7 генерирует нисходящие несовместимые файлы классов, поэтому каждая возможная идея должна происходить на уровне источников (до или во время процесса сборки, а не после).