У меня есть веб-проект, который построен с Maven, и я пытаюсь найти лучший способ скомпилировать файлы JavaScript с помощью компилятора RequireJS (этот вопрос может применяться к любому компилятору/минерал).RequireJS Компиляция в проекте Maven с внешними зависимостями JS
У меня есть установка, которая работает, но она нуждается в улучшении:
Я упакована в 3-й партии библиотеки JavaScript, и они загружаются в качестве зависимостей, а затем добавил с плагином WAR Overlay.
У меня есть задача плагина Exec, которая запускает компилятор RequireJS внутри целевого каталога. В настоящий момент я запускаю вручную exec:exec
после запуска целевого объекта (и поэтому содержимое WAR помещается в целевой каталог).
Я хотел бы вместо этого сделать компиляцию JS части основной (Java) компиляции. Сам компилятор JS (Require JS) загружается как зависимость во время фазы наложения WAR, которая происходит после компиляции. Поэтому мне нужно, чтобы требуемые файлы JS загружались и распаковывались, и мне нужно запускать компиляцию JS с использованием этих файлов до/во время/после компиляции Java.
Я уверен, что может быть несколько способов достичь этого. Я ищу наиболее элегантное решение.
Обновление: Существующие фрагменты POM
У меня есть зависимости JavaScript, которые я заархивированы и добавлен в наш репозиторий менеджер:
<dependency>
<groupId>org.requirejs</groupId>
<artifactId>requirejs</artifactId>
<version>0.22.0</version>
<classifier>repackaged</classifier>
<type>zip</type>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.jqueryui</groupId>
<artifactId>jquery-ui</artifactId>
<version>1.8.7</version>
<classifier>repackaged</classifier>
<type>zip</type>
<scope>runtime</scope>
</dependency>
принять к сведению, что RequireJS себя (что необходимо для компиляция остальных библиотек) также загружается как внешняя зависимость. Итак, во-первых, мне нужно, чтобы эта зависимость загружалась и распаковывалась, прежде чем я начну с компиляции RequireJS.
Эти зависимости добавляются в WAR с помощью плагина WAR Overlay:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<overlays>
<overlay>
<groupId>org.requirejs</groupId>
<artifactId>requirejs</artifactId>
<classifier>repackaged</classifier>
<type>zip</type>
<targetPath>lib</targetPath>
<includes>
<include>requirejs/require.js</include>
<include>requirejs/require/*</include>
<include>requirejs/build/**</include>
</includes>
</overlay>
<overlay>
<groupId>com.jqueryui</groupId>
<artifactId>jquery-ui</artifactId>
<classifier>repackaged</classifier>
<type>zip</type>
<targetPath>lib</targetPath>
</overlay>
</overlays>
</configuration>
</plugin>
Даже если мне не нужно requirejs/build/**
закончить в WAR, я в том числе его как часть наложения чтобы получить распакованные скрипты сборки RequireJS, просто потому, что я не понял лучшего способа.
Тогда у меня есть задача плагина Exec, которая выполняет компиляцию. Но обратите внимание, что эта задача не была добавлена к обычному потоку компиляции работы: я должен вручную вызвать его с mvn exec:exec
после упаковки WAR сделано:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>lib/requirejs/build/build.bat</executable>
<workingDirectory>${project.build.directory}/${project.artifactId}</workingDirectory>
<arguments>
<argument>name=bootstrap</argument>
<argument>out=combined.js</argument>
<argument>baseUrl=scripts</argument>
<argument>optimize=closure</argument>
<argument>excludeShallow=plugins/manifest</argument>
</arguments>
</configuration>
</plugin>
Так, некоторые вопросы:
- Как я могу извлечь разные части одной заархивированной зависимости для шагов сборки компиляции и WAR? Или мне нужно создать два zip-файла, один с файлом runtime, а другой для скриптов компиляции?
- Я хотел бы включить
exec:exec
в идеале во время компиляции, а если нет, перед упаковкой WAR. Как мне это сделать?
Я действительно пробовал кучу вещей без успеха, поэтому я надеюсь, что я не буду лениво размещать огромный кусок кода и ждать ответов :) Это просто, что я не совсем завернул свой разум вокруг того, как цели/фазы Maven работают еще.
Возможно, вы сможете разместить соответствующий фрагмент pom? – Raghuram
@ Raghuram: Выполнено. –