Я преобразовываю великоватую сборку Муравья в Знатока. Как часть сборки Муравья, у нас есть несколько шагов, которые создали классы Java путем вызова одного из классов проекта, упрощенных как:
javac SomeGenerator.java
java SomeGenerator generated # generate classes in generated/
javac generated/*.java
Я разделил каждый генератор в его собственном модуле Знатока, но у меня есть проблема неспособности выполнить генератор, так как это еще не компилируется в generate-sources
фаза.
Я попробовал что-то подобное
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<id>generate-model</id>
<goals>
<goal>java</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<mainClass>DTOGenerator</mainClass>
<arguments>
<argument>${model.generated.dir}</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
Который печально не работает по причинам, обрисованным в общих чертах выше. Разделяя генераторы кода на два проекта каждый, один для компиляции генератора и другой для генерации DTOs кажется излишеством.
Что альтернативы там?
Использование знатока 2.2.1.
Вы можете выполнить Maven-Compile-Plugin в этапе генерации-источников. Просто добавьте еще одно исполнение перед существующим выполнением и настройте его, чтобы он просто поднимал источники для генератора.
Или разделить проект в два: построить генератор отдельным POM и включите библиотеку генератора в качестве зависимости от POM, который генерирует источники.
Лично я разделил проект. Удерживает очиститель файлов сборки и легче поддерживать.
Нет прямого способа сделать это.
Вы можете загрузить сценарий по запросу. (снова использует нечто похожее на то, что упомянул Игнасио, но намного чище).
Проверьте эту ссылку на наличие нескольких способов: http://ajaxpatterns.org/On-Demand_Javascript
Мой любимый вариант (не всегда применим):
<script src="dojo.js" type="text/javascript">
dojo.require("dojo.aDojoPackage");
Закрытие Google также обеспечивает аналогичную функциональность.
-121--801980- У меня недостаточно контекста, чтобы дать правильный ответ, но я предложу вам максимально сделать код неизменным . Используйте поля public final
. Больше не получает
или setters
: каждое поле должно быть определено конструктором
. Ваш код короче, удобочитаем и не позволяет писать код с побочными эффектами.
Это не мешает передавать пустые аргументы конструктору, хотя... Вы по-прежнему можете проверить каждый аргумент в соответствии с предложением @ cletus, но я предложу вам бросить IllegalArgumentException
вместо StartPointerException
, который не дает нового намека на то, что вы сделали.
В любом случае, это то, что я делаю как можно больше, и это значительно улучшило мой код (читаемость, стабильность). Все в моей команде так и делают, и мы этим очень довольны. Мы узнали, что когда мы пытаемся написать какой-то erlang
код, где все незыблемо.
Надеюсь, это поможет.
-121--148â2-Мы столкнулись с той же проблемой. Мы хотели уважать поведение Maven как можно ближе, не иметь проблем с плагинами и так далее... Сражаться с Мэйвеном слишком дорого!
Мы поняли, что частота обновления генерируемого кода обычно сильно отличается от частоты кода, который мы записываем вручную, поэтому разделение кода имело очень хорошие характеристики производительности для сборки. Поэтому мы решили, что наши сгенерированные классы являются зависимостью от написанного вручную.
Мы приняли следующую структуру, которая имела только одно небольшое изменение от обычной конфигурации maven, изменение в исходном каталоге.
Мы создали родительский проект для всех наших поколений .
Примечание. Если требуется несколько сгенерированных результатов в одной банке, просто поместите их в одну подкаталогу.
Исходный каталог указывает на поддиректорию в родительском целевом объекте.
< sourceDirectory > ../target/generated1
Он обычно компилируется в собственном/целевом каталоге.
Эта структура позволяет:
< includes >
для обработки только некоторых классов).