Мы используем frontend-maven-plugin для использования grunt и bower в наших сборках. С плагином Frontend Maven я могу установить NPM локально, использовать Bower для загрузки библиотек Java и запускать Grunt для оптимизации и обфускации моего кода.
Вот так, с некоторым упрощением:
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>0.0.24</version>
<executions>
<execution>
<id>install node and npm</id>
<goals> <goal>install-node-and-npm</goal> </goals>
...
</execution>
<execution>
<id>npm-install</id>
<goals> <goal>npm</goal> </goals>
...
</execution>
<execution>
<id>bower-install</id>
<goals> <goal>bower</goal> </goals>
...
</execution>
<execution>
<id>grunt-build</id>
<goals> <goal>grunt</goal> </goals>
...
</execution>
</executions>
</plugin>
Обратите внимание, что последним выполнением является grunt-build, когда файлы JavaScript объединяются вместе, оптимизируются (удаляются возвраты, комментарии и другие вещи) и запутываются.
Это хорошо работает для релизов. Однако разработчики хотели бы развернуть войну без объединения, оптимизации и запутывания файлов JavaScript. Это поможет им в отладке. Для этого нам просто нужно удалить раздел выполнения grunt-build
из конфигурации этого плагина.
Я хотел бы использовать профили для этого. Я мог бы иметь профиль под названием development
, который позволяет разработчикам выполнять сборку без этого последнего раздела. Я мог бы просто скопировать и вставить этот раздел файла pom.xml
, удалить последнее выполнение и поместить его в отдельный профиль. Все сделано.
Однако существует старая пословица программирования: не повторяйтесь. Я бы продублировал около 50 строк кода в моем файле pom.xml
.
Что я хотел бы сделать, так это иметь способ выполнить первые три выполнения и выполнить четвертое, только если это не сборка для разработки. Я хотел бы иметь несколько других закусок и защипов в этом, а также. Например, мне пришлось бы копировать сами JavaScript, а не хрюкающие результаты. Но это достаточно просто сделать, и код не дублируется.
Это привело бы к дублированию кода, потому что мне пришлось бы определять frontend-maven-plugin
с двумя конфигурациями. Один раз для профиля development
и один раз для сборки стандартного релиза. Насколько я знаю, я не могу сказать, запустить эту конфигурацию frontend-maven-plugin
, и если это не сборка для разработки, запустить этот экземпляр frontend-maven-plugin
, который будет выполнять только ворчание.
Есть ли способ определить один и тот же плагин дважды в pom.xm
и заставить Maven запускать оба экземпляра в правильном порядке?